pyspark如何在具有相同键匹配的两个RDD之间加号

时间:2016-03-07 03:21:29

标签: python apache-spark pyspark

假设我有2个RDD

其中RDD1 has (key1,key2,value)

RDD2 has (key1, value)

现在我想将RDD2的操作(如+或减号)与key1匹配的RDD1结合起来 这是例子

RDD1 has [1,1,3],[1,2,2],[2,2,5]

RDD2 = sc.parallelize([1,1])

我想要结果

RDD3 to [1,1,4],[1,2,3],[2,2,5]  only the first and second data was added while third one wasn't

我尝试使用左外连接来查找key1上的匹配并执行一些操作但是我将丢失不需要操作的数据是否有办法在部分数据中进行操作?

1 个答案:

答案 0 :(得分:1)

假设您想要成对操作或数据包含1到0..1关系,您可以做的最简单的事情是将两个RDD转换为DataFrames

from pyspark.sql.functions import coalesce, lit

df1 = sc.parallelize([
    (1, 1, 3), (1, 2, 2), (2, 2, 5)
]).toDF(("key1", "key2", "value"))

df2 = sc.parallelize([(1, 1)]).toDF(("key1", "value"))

new_value = (
    df1["value"] +  # Old value
    coalesce(df2["value"], lit(0))  # If no match (NULL) take 0
).alias("value")  # Set alias

df1.join(df2, ["key1"], "leftouter").select("key1", "key2", new_value)

您可以在加入df2之前在DataFrames上应用聚合,轻松调整此处理其他方案。