【问题标题】:Pyspark | Transform RDD from key with list of values > values with list of keys派斯帕克 |将 RDD 从带有值列表的键 > 带有键列表的值转换
【发布时间】:2018-11-28 22:50:54
【问题描述】:

在pyspark中,如何将每个键都有一个值列表的输入RDD转换为每个值都有一个它所属的键列表的输出RDD?

输入

[(1, ['a','b','c','e']), (2, ['b','d']), (3, ['a','d']), (4, ['b','c'])]

输出

[('a', [1, 3]), ('b', [1, 2, 4]), ('c', [1, 4]), ('d', [2,3]), ('e', [1])]

【问题讨论】:

    标签: pyspark apache-spark-sql rdd


    【解决方案1】:

    先展平并交换rdd上的键值,然后groupByKey:

    rdd.flatMap(lambda r: [(k, r[0]) for k in r[1]]).groupByKey().mapValues(list).collect()
    # [('a', [1, 3]), ('e', [1]), ('b', [1, 2, 4]), ('c', [1, 4]), ('d', [2, 3])]
    

    【讨论】:

    • 当输入有 1 个键但有 2 个值(Int、String、List)时,如何使 mapValues(list) 工作?
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2016-01-15
    • 1970-01-01
    • 2021-07-07
    • 2018-10-03
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多