Lambda 使用pyspark交叉组合两个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

我如何交叉组合(这是正确的描述方式吗?)两个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。
。我猜这意味着您不能像列表理解那样嵌套
动作
,一条语句只能执行一个
动作
,因此您已经注意到无法执行
转换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)