[英]Pyspark - Flattening a list of dictionaries (piplelinedRDD) into a single dictionary and grouping by values by key
我有一個存儲在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]}
由於字典存儲在管道化的RDD中,因此該字典也不可迭代。
我使用整數作為字典的值,如果您有字符串,則過程相同。
啟動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]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.