pyspark RDD 将一行扩展为多行

Posted

技术标签:

【中文标题】pyspark RDD 将一行扩展为多行【英文标题】:pyspark RDD expand a row to multiple rows 【发布时间】:2017-05-06 18:42:31 【问题描述】:

我在 pyspark 中有以下 RDD,我相信这应该很简单,但一直无法弄清楚:

information = [ (10, 'sentence number one'),
                (17, 'longer sentence number two') ]

rdd = sc.parallelize(information)

我需要应用一个转换,将 RDD 变成这样:

[ ('sentence', 10),
  ('number', 10),
  ('one', 10),
  ('longer', 17),
  ('sentence', 17),
  ('number', 17),
  ('two', 17) ]

基本上把一个句子的key扩展成多行,以单词为key。

我想避免使用 SQL。

【问题讨论】:

【参考方案1】:

使用flatMap:

rdd.flatMap(lambda x: [(w, x[0]) for w in x[1].split()])

示例

rdd.flatMap(lambda x: [(w, x[0]) for w in x[1].split()]).collect()
# [('sentence', 10), ('number', 10), ('one', 10), ('longer', 17), ('sentence', 17), ('number', 17), ('two', 17)]

【讨论】:

太棒了!简短、简单、易懂!

以上是关于pyspark RDD 将一行扩展为多行的主要内容,如果未能解决你的问题,请参考以下文章

从多行生成一行到 RDD

研究 RDD-pyspark 的不同元素

将列内包含 JSON 数组的行扩展为多行

我可以将 Pyspark RDD 用作 Pandas DataFrame 吗? Pyspark/spark 在数据分析中对 Pandas 的限制?

使用 Pyspark 从单词列表的行条目创建元组并使用 RDD 计数

PySpark - 将多行客户“压缩”成一行,删除空白