簡體   English   中英

Pyspark-將字典列表(piplelinedRDD)展平到單個字典中,並按鍵將值分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM