【问题标题】:pyspark merge two rdd togetherpyspark 将两个 rdd 合并在一起
【发布时间】:2017-08-05 14:47:34
【问题描述】:

我有两个 rdd,它们都是 groupby 的结果,看起来像:

[(u'1', [u'0']), (u'3', [u'1']), (u'2', [u'0']), (u'4', [u'1'])]

[(u'1', [u'3', u'4']), (u'0', [u'1', u'2'])]

如何将两者合并并获得以下内容:

[(u'1', [u'0',u'3', u'4']]), (u'3', [u'1']), (u'2', [u'0']), (u'4', [u'1']),(u'0', [u'1', u'2'])]

我尝试了 join 命令,但这并没有给我想要的结果。非常感谢任何帮助。

【问题讨论】:

    标签: python apache-spark pyspark rdd


    【解决方案1】:

    我解决了这个问题:

    rdd2.union(rdd1).reduceByKey(lambda x,y : x+y)
    

    以下都不适合我:

    (rdd1 union rdd2).reduceByKey(_ ++ _)
    

    rdd1.join(rdd2).map(case (k, (ls, rs)) => (k, ls ++ rs))
    

    祝大家好运。

    【讨论】:

      【解决方案2】:
      data1 = [(u'1', [u'0']), (u'3', [u'1']), (u'2', [u'0']), (u'4', [u'1'])]
      data2 = [(u'1', [u'3', u'4']), (u'0', [u'1', u'2'])]
      
      distData1 = sc.parallelize(data1)
      distData2 = sc.parallelize(data2)
      distData3 = distData1.leftOuterJoin(distData2)
      distData4 = distData3.map(lambda rec : ( rec[0], rec[1][0] + [ ] if rec[1][1] is None else rec[1][1])
      

      【讨论】:

      • 虽然这可能会回答作者的问题,但它缺少一些解释性文字和文档链接。如果没有围绕它的一些短语,原始代码 sn-ps 并不是很有帮助。您可能还会发现how to write a good answer 非常有帮助。请编辑您的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多