Spark中两个RDD的笛卡尔积

c0vxltue  于 2023-03-23  发布在  Apache
关注(0)|答案(3)|浏览(203)

我对Apache Spark完全陌生,我试图笛卡尔积两个RDD。作为一个例子,我有A和B如下:

A = {(a1,v1),(a2,v2),...}
B = {(b1,s1),(b2,s2),...}

我需要一个新的RDD,如:

C = {((a1,v1),(b1,s1)), ((a1,v1),(b2,s2)), ...}

有什么想法我可以做到这一点?尽可能简单:)
先谢了
PS:我终于按照@Amit Kumar的建议这样做了:

cartesianProduct = A.cartesian(B)
w7t8yxp5

w7t8yxp51#

这不是点积,这是笛卡尔积。使用cartesian方法:

def cartesian[U](other: spark.api.java.JavaRDDLike[U, _]): JavaPairRDD[T, U]

返回这个RDD和另一个RDD的笛卡尔积,即所有元素对(a,B)的RDD,其中a在this中,b在other中。
Source

s5a0g9ez

s5a0g9ez2#

你可以这样做:

A = {(a1,v1),(a2,v2),...}
B = {(b1,s1),(b2,s2),...}

C = A.cartesian(B)

如果您这样做:

C.take(5)

你可以看到这就是你想要的。

ct2axkht

ct2axkht3#

如果您对如何处理多个列表感到好奇,这里有一个pyspark中的示例

>>> a = [1,2,3]
>>> b = [5,6,7,8]
>>> c = [11,22,33,44,55]
>>> import itertools
>>> abcCartesianRDD = sc.parallelize(itertools.product(a,b,c))
>>> abcCartesianRDD.count() #Test
    60

相关问题