想象一下,我有兩個 RDDS 我想按元素進行比較:
data1 = [1,2,3]
rdd1 = spark.sparkContext.parallelize(data1)
data2 = [7,8,9]
rdd2 = spark.sparkContext.parallelize(data2)
將它們逐元素相乘以便最終得到以下陣列的最佳方法是什么?
rdd3 = [[7,8,9], [14,16,18], [21,24,27]]
我有一種感覺,這是一個連接操作,但我不確定如何設定鍵值對。
uj5u.com熱心網友回復:
您可以找到 的cartesian連接,rdd's然后減少它們以獲得串列。
注意:Spark 是一個分布式處理引擎,
reduceByKey可以按任意順序回傳最終串列。如果您想要強排序保證,請豐富您的 RDD 以包含索引元素。
data1 = [1,2,3]
rdd1 = spark.sparkContext.parallelize(data1)
data2 = [7,8,9]
rdd2 = spark.sparkContext.parallelize(data2)
rdd1.cartesian(rdd2)\
.map(lambda x: (x[0], [x[0] * x[1]]))\
.reduceByKey(lambda x, y: x y)\
.map(lambda x: x[1]).collect()
輸出
[[7, 8, 9], [14, 16, 18], [21, 24, 27]]
uj5u.com熱心網友回復:
嘗試笛卡爾,像這樣:
data1 = [1,2,3]
rdd1 = spark.sparkContext.parallelize(data1)
data2 = [[7,8,9]]
rdd2 = spark.sparkContext.parallelize(data2)
rdd1.cartesian(rdd2).map(lambda x: [x[0]*i for i in x[1]]).collect()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/382362.html
