Декартово произведение двух RDD в Spark
Я совершенно новичок в 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)
3 ответа
Решение
Это не точка, а декартово произведение. Использовать cartesian
метод:
def cartesian[U](other: spark.api.java.JavaRDDLike[U, _]): JavaPairRDD[T, U]
Вернуть декартово произведение этого СДР и еще одно, то есть СДР всех пар элементов (a, b), где a находится в
this
и б находится вother
,
Вы можете сделать это следующим образом:
A = {(a1,v1),(a2,v2),...}
B = {(b1,s1),(b2,s2),...}
C = A.cartesian(B)
И если вы делаете:
C.take(5)
Вы можете видеть, что это то, что вы хотите.
На всякий случай, если вам интересно, как это сделать с несколькими списками, вот пример в 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