【问题标题】:Group rdd based on a value in pyspark根据 pyspark 中的值对 rdd 进行分组
【发布时间】:2020-05-22 20:59:27
【问题描述】:

我创建了一个 rdd 并使用以下命令打印结果:

finalRDD = replacetimestampRDD.map(lambda x: (x[1], x[0:]))
print("Partitions structure: {}".format(finalRDD.glom().collect()))

输出(一个例子):

Partitions structure: [[('a', ['2020-05-22 15:17:10', 'John', '9535175']), 
                        ('b', ['2020-05-22 15:17:10', 'Nick', '7383554',]),
                        ('c', ['2020-05-22 15:17:10', 'George', '8915433']),
                        ('a', ['2020-05-22 15:17:10', 'Paul', '9615224'])
                      ]]

我尝试按键对结果进行分组(按键我的意思是'a','b','c')。期望的输出:

Partitions structure: [[('a', [['2020-05-22 15:17:10', 'John', '9535175'],['2020-05-22 15:17:10', 'Paul', '9615224']]), 
                        ('b', ['2020-05-22 15:17:10', 'Nick', '7383554',]),
                        ('c', ['2020-05-22 15:17:10', 'George', '8915433'])
                          ]]

我尝试使用results = finalRDD.groupByKey().collect(),但它似乎不起作用?

谁能帮我解决这个问题?

【问题讨论】:

  • RDD 的结构是列表的列表吗?您给出的示例输出,它是显示单个输出元素还是应该显示一个包含 4 个元素的列表?
  • 是的,结构如列表所示。示例输出必须是包含 4 个元素的列表

标签: apache-spark pyspark rdd


【解决方案1】:

您可以在groupByKey() 之后使用mapValues() 来创建一个关闭值列表:

rdd.groupByKey().mapValues(list).collect()

输出:

[('a',
  [['2020-05-22 15:17:10', 'John', '9535175'],
   ['2020-05-22 15:17:10', 'Paul', '9615224']]),
 ('b', [['2020-05-22 15:17:10', 'Nick', '7383554']]),
 ('c', [['2020-05-22 15:17:10', 'George', '8915433']])]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-12
    • 2020-08-09
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2017-12-06
    相关资源
    最近更新 更多