2015-06-22 2 views
0

Я совершенно новичок в Apache Spark, и я пытаюсь декартово производить два RDD. В качестве примера я есть А и В, как:Декартовое произведение двух RDD в искры

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

мне нужен новый RDD нравится:

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

Любая идея, как я могу это сделать? Как просто, как это возможно :)

Заранее спасибо

PS: Я, наконец, сделал это так, как предложил @Amit Кумар:

= A.cartesian прямое произведение (B)

ответ

5

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

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

Return декартово произведение этого RDD и другой, то есть, РДД всех пар элементов (а, б), где в this и б в other ,

Source

1

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

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

C = A.cartesian(B) 

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

C.take(5) 

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

1

Только в том случае, если вы хотите знать, как это сделать с несколькими списками, вот пример в 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 
Смежные вопросы