【问题标题】:How to flatten the results of an RDD.groupBy() from (key, [values]) into (key, values)?如何将 RDD.groupBy() 的结果从 (key, [values]) 展平为 (key, values)?
【发布时间】:2019-09-14 23:10:34
【问题描述】:

来自键值对的 RDD,例如

[(1, 3), (2, 4), (2, 6)]

我想获得一个像这样的元组的RDD

[(1, 3), (2, 4, 6)]

其中每个元组的第一个元素是原始 RDD 中的键,下一个元素是与原始 RDD 中该键关联的所有值

我试过了

rdd.groupByKey().mapValues(lambda x:[item for item in x]).collect()

给了

[(1, [3]), (2, [4, 6])]

但这不是我想要的。我没有设法“分解”结果的每个元组中的项目列表。

【问题讨论】:

    标签: pyspark


    【解决方案1】:

    rdd.groupByKey().map(lambda x: (x[0],*tuple(x[1]))).collect()

    【讨论】:

      【解决方案2】:

      我想出的最好的是

      rdd.groupByKey().mapValues(lambda x:[a for a in x]).map(lambda x: tuple([x[0]]+x[1])).collect()
      

      可以做得更紧凑或更高效吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-31
        • 2017-02-20
        • 2020-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多