【问题标题】:How to group by one column in rdd in pyspark?如何在pyspark的rdd中按一列分组?
【发布时间】:2017-10-25 19:58:46
【问题描述】:

pyspark 中的 rdd 由每个列表中的四个元素组成:

[id1, 'aaa',12,87]
[id2, 'acx',1,90]
[id3, 'bbb',77,10]
[id2, 'bbb',77,10]
.....

我想按第一列中的 id 进行分组,并得到其他三列的聚合结果:例如 => [id2,[['acx',1,90], ['bbb',77,10]...]] 我怎样才能意识到它?

【问题讨论】:

标签: pyspark


【解决方案1】:
spark.version
# u'2.2.0'

rdd = sc.parallelize((['id1', 'aaa',12,87],
                      ['id2', 'acx',1,90],
                      ['id3', 'bbb',77,10],
                      ['id2', 'bbb',77,10]))

rdd.map(lambda x: (x[0], x[1:])).groupByKey().mapValues(list).collect()

# result:

[('id2', [['acx', 1, 90], ['bbb', 77, 10]]), 
 ('id3', [['bbb', 77, 10]]), 
 ('id1', [['aaa', 12, 87]])]

或者,如果您更喜欢列表,您可以在mapValues 之后再添加一个map 操作:

rdd.map(lambda x: (x[0], x[1:])).groupByKey().mapValues(list).map(lambda x: list(x)).collect()

# result:

[['id2', [['acx', 1, 90], ['bbb', 77, 10]]], 
 ['id3', [['bbb', 77, 10]]],
 ['id1', [['aaa', 12, 87]]]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多