【问题标题】:Pyspark - Flattening a list of dictionaries (piplelinedRDD) into a single dictionary and grouping by values by keyPyspark - 将字典列表(piplelinedRDD)展平为单个字典并按键按值分组
【发布时间】:2017-11-11 11:07:44
【问题描述】:

我有一个存储在 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 中,因此字典也不可迭代。

【问题讨论】:

  • “字典不可迭代”是什么意思?
  • 对不起,我的意思是 piplelinedRDD 不可迭代,如果你尝试迭代它会抛出错误
  • foreach怎么样?

标签: python dictionary group-by pyspark rdd


【解决方案1】:

我使用整数作为字典的值,如果你有字符串,过程是一样的。

启动 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]}

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多