Lambda 使用pyspark交叉组合两个RDD
我如何交叉组合(这是正确的描述方式吗?)两个RDD 输入:Lambda 使用pyspark交叉组合两个RDD,lambda,apache-spark,rdd,pyspark,Lambda,Apache Spark,Rdd,Pyspark,我如何交叉组合(这是正确的描述方式吗?)两个RDD 输入: rdd1 = [a, b] rdd2 = [c, d] 输出: rdd3 = [(a, c), (a, d), (b, c), (b, d)] 我尝试了rdd3=rdd1.flatMap(lambda x:rdd2.map(lambda y:(x,y)),它抱怨说,似乎您试图广播一个RDD或引用一个动作或转换中的RDD。。我猜这意味着您不能像列表理解那样嵌套动作,一条语句只能执行一个动作,因此您已经注意到无法执行转换nsformat
rdd1 = [a, b]
rdd2 = [c, d]
输出:
rdd3 = [(a, c), (a, d), (b, c), (b, d)]
我尝试了
rdd3=rdd1.flatMap(lambda x:rdd2.map(lambda y:(x,y))
,它抱怨说,似乎您试图广播一个RDD或引用一个动作或转换中的RDD。
。我猜这意味着您不能像列表理解那样嵌套动作
,一条语句只能执行一个动作
,因此您已经注意到无法执行转换nsformation
在另一个转换
(注意flatMap
和map
是转换
,而不是操作
,因为它们返回RDD)。谢天谢地,Spark API中的另一个转换(即笛卡尔(见附件)
因此,您需要执行rdd1。笛卡尔(rdd2)
您可以使用笛卡尔变换。文档中的示例:
>>> rdd = sc.parallelize([1,2])
>>> sorted(rdd.cartesian(rdd).collect())
[(1, 1), (1, 2), (2, 1), (2, 2)]
以你的情况来说,你会做的
rdd3=rdd1.笛卡尔(rdd2)