我有一个存储在 piplelinedRDD 中的字典列表,看起来像这样:
[{ZDX: ID_42, XCZ: ID_32, ZXD: ID_434}, {ZDX: ID_69, XXF: ID_30, HGL: ID_239, XCZ: ID_01}]
我想产生如下所示的输出
{ZDX: [ID_42, ID_69], XCZ: [ID_32, ID_01], ZXD: [ID_434], XXF: [ID_30], HGL :[ID_239]}
由于它存储在 pipelinedRDD 中,因此字典也不可迭代。
最佳答案
我使用整数作为字典的值,如果你有字符串,过程是相同的。
启动RDD
>>> rdd = sc.parallelize([{'ZDX': 42, 'XCZ': 32, 'XD': 434}, {'ZDX': 69, 'XXF': 30, 'HGL': 239, 'XCZ': 1}])
使用代表您的对(键,值)的元组创建 RDD:
>>> items = rdd.flatMap(lambda line: (line.items()))
>>> items.take(items.count())
[('XCZ', 32),('ZDX', 42), ('XD', 434), ('XCZ', 1),('HGL', 239),('ZDX', 69),('XXF', 30)]
按键分组:
>>> groupedItems = items.groupByKey().mapValues(list)
>>> groupedItems.take(groupedItems.count())
>>> [('XCZ', [32, 1]),('ZDX', [42, 69]), ('XXF', [30]),('HGL', [239]), ('XD', [434])]
使用collectAsMap为了从 RDD 中获取字典
>>> d = groupedItems.collectAsMap()
>>> {'HGL': [239], 'XCZ': [32, 1], 'XD': [434], 'XXF': [30], 'ZDX': [42, 69]}
关于python - Pyspark - 将字典列表(piplelinedRDD)扁平化为单个字典并按键按值分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44457658/