Декартово произведение двух СДР в 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)


person ahajib    schedule 22.06.2015    source источник


Ответы (3)


Это не скалярное произведение, это декартово произведение. Используйте метод cartesian:

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

Верните декартово произведение этого СДР и другого, то есть СДР всех пар элементов (a, b), где a находится в this, а b находится в other.

Источник

person Amit Kumar Gupta    schedule 22.06.2015

Вы можете сделать это следующим образом:

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

C = A.cartesian(B)

И если вы сделаете:

C.take(5)

Вы можете видеть, что это то, что вы хотите.

person Community    schedule 01.07.2015

На всякий случай, если вам интересно, как поступить с несколькими списками, вот пример в 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
person blueskin    schedule 17.09.2015