Pyspark - 在火花数据框列使用reducebykey即列出
问题描述:
所以我有一个名为ngram_df一个火花数据框看起来像这样Pyspark - 在火花数据框列使用reducebykey即列出
--------------------------------
Name | nGrams |
--------|--------------------- |
Alice | [ALI, LIC, ICE] |
Alicia | [ALI, LIC, ICI, CIA] |
--------------------------------
我想产生一个字典的形式,如输出:
ALI: 2, LIC: 2, ICE: 1, ICI: 1, CIA: 1
我一直在试图打开的n-gram列到RDD,这样我就可以使用reduceByKey功能
rdd = ngram_df.map(lambda row: row['nGrams'])
test = rdd.reduceByKey(add).collect()
但是我得到的错误:
ValueError: too many values to unpack
即使使用flatmap没有帮助,因为我得到的错误:
ValueError: need more than 1 value to unpack
答
这是可能的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)]
很好的答案,完美的作品。 – Zilong