Pyspark - 在作为列表的 spark 数据框列上使用 reducebykey
Posted
技术标签:
【中文标题】Pyspark - 在作为列表的 spark 数据框列上使用 reducebykey【英文标题】:Pyspark - Using reducebykey on spark dataframe column that is lists 【发布时间】:2017-06-06 13:51:13 【问题描述】:所以我有一个名为 ngram_df 的 spark 数据框,看起来像这样
--------------------------------
Name | nGrams |
--------|--------------------- |
Alice | [ALI, LIC, ICE] |
Alicia | [ALI, LIC, ICI, CIA] |
--------------------------------
我想以字典形式生成输出,例如:
ALI:2,LIC:2,ICE:1,ICI:1,CIA:1
我一直在尝试将 nGrams 列转换为 RDD,以便我可以使用 reduceByKey 函数
rdd = ngram_df.map(lambda row: row['nGrams'])
test = rdd.reduceByKey(add).collect()
但是我得到了错误:
ValueError:解包的值太多
即使使用 flatmap 也无济于事,因为我得到了错误:
ValueError: 需要超过 1 个值才能解压
【问题讨论】:
【参考方案1】:这可以通过 flatMap 和 reduceByKey 方法的组合来实现。
rdd = spark.sparkContext.parallelize([('Alice', ['ALI', 'LIC', 'ICE']), ('Alicia', ['ALI', 'LIC', 'ICI', 'CIA'])])
result = rdd.flatMap(lambda x: [(y, 1) for y in x[1]] ).reduceByKey(lambda x,y: x+y)
result.collect()
[('ICI', 1), ('CIA', 1), ('ALI', 2), ('ICE', 1), ('LIC', 2)]
【讨论】:
以上是关于Pyspark - 在作为列表的 spark 数据框列上使用 reducebykey的主要内容,如果未能解决你的问题,请参考以下文章
pyspark 从 spark 数据框列创建一个不同的列表并在 spark sql where 语句中使用
数据框列中的嵌套列表,提取数据框列中列表的值 Pyspark Spark
使 Spark 结构化流中的 JSON 可以在 python (pyspark) 中作为没有 RDD 的数据帧访问
PySpark:Spark数据框-将ImageSchema列转换为nDArray作为新列