2016-02-28 64 views
0

我有火花數據幀如下圖所示如何比較每個值與pyspark中的每個其他值?

a b 
(21 , 23) 
(23 , 21) 
(22 , 21) 
(21 , 22) 

我希望有一個數據幀應該是這樣的: -

(21 , 22) 
(21 , 23) 
(22 , 21) 
(22 , 23) 
(23 , 21) 
(23 , 22) 

所以應該考慮爲兩列所有可能的組合。這可以如何實現?

我嘗試過笛卡爾連接,但它花費了太多的時間來處理非常小的數據集。所有其他選擇?

謝謝。

回答

0

嘗試

zip(*pairs_rdd).flatten.deduplicate.foreach(n => (n,n-1)).cache() 
0

這是很難說爲什麼你join是「花費過多時間」沒有看到你的代碼。我發現以下方法對我來說合理快速地工作:

df = sqlContext.createDataFrame(
    [ 
    Row(a=21, b=22), 
    Row(a=22, b=23), 
    ] 
) 

# rename to avoid identical colume names in the result 
df_copy = df.alias('df_copy') 
df_copy = df_copy.withColumnRenamed('a', 'a_copy') 
df_copy = df_copy.withColumnRenamed('b', 'b_copy') 

df.join(df_copy, how='outer').select(df.a, df_copy.b_copy).collect() 
相關問題