假设我有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上的匹配并执行一些操作但是我将丢失不需要操作的数据是否有办法在部分数据中进行操作?
答案 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
上应用聚合,轻松调整此处理其他方案。