spark reducebykey 忽略休息
spark reducebykey and ignore rest
我正在尝试以第一列作为键在两个 RDD 之间执行连接。 RDD 看起来像:
RDD1:
(k1,(s11,s12,s13))
(k2,(s21,s22,s23))
(k3,(s31,s32,s33))
...
RDD2:
(k1,(t11,t12,t13))
(k2,(t21,t22,t23))
(k4,(t41,t42,t43))
...
来自一个 RDD 的 ki 可能会或可能不会找到另一个 RDD 的匹配项。但是,如果它确实找到了匹配项,它将只匹配另一个 RDD 的一行。换句话说,ki 是两个 RDD 的主键。
我正在
RDD3=RDD1.union(RDD2).reduceByKey(lambda x,y:(x+y)).filter(lambda x:len(x[1])==6)
生成的 RDD 如下所示:
RDD3:
(k1,(s11,s12,s13,t11,t12,t13))
(k2,(s21,s22,s23,t21,t22,t23))
...
我想在计算 RDD3 时避免使用 filter
函数。它看起来像是一个可以避免的计算。是否可以使用内置的 spark 函数来做到这一点?我不想使用 spark-sql 或 dataframes
您需要 join
方法后跟 mapValues
方法来连接来自同一键的值:
rdd1.join(rdd2).mapValues(lambda x: x[0] + x[1]).collect()
# [('k2', ('s21', 's22', 's23', 't21', 't22', 't23')),
# ('k1', ('s11', 's12', 's13', 't11', 't12', 't13'))]
我正在尝试以第一列作为键在两个 RDD 之间执行连接。 RDD 看起来像:
RDD1:
(k1,(s11,s12,s13))
(k2,(s21,s22,s23))
(k3,(s31,s32,s33))
...
RDD2:
(k1,(t11,t12,t13))
(k2,(t21,t22,t23))
(k4,(t41,t42,t43))
...
来自一个 RDD 的 ki 可能会或可能不会找到另一个 RDD 的匹配项。但是,如果它确实找到了匹配项,它将只匹配另一个 RDD 的一行。换句话说,ki 是两个 RDD 的主键。
我正在
RDD3=RDD1.union(RDD2).reduceByKey(lambda x,y:(x+y)).filter(lambda x:len(x[1])==6)
生成的 RDD 如下所示:
RDD3:
(k1,(s11,s12,s13,t11,t12,t13))
(k2,(s21,s22,s23,t21,t22,t23))
...
我想在计算 RDD3 时避免使用 filter
函数。它看起来像是一个可以避免的计算。是否可以使用内置的 spark 函数来做到这一点?我不想使用 spark-sql 或 dataframes
您需要 join
方法后跟 mapValues
方法来连接来自同一键的值:
rdd1.join(rdd2).mapValues(lambda x: x[0] + x[1]).collect()
# [('k2', ('s21', 's22', 's23', 't21', 't22', 't23')),
# ('k1', ('s11', 's12', 's13', 't11', 't12', 't13'))]