2016-02-28 2 views
0

У меня есть dataframe в искры, как показано нижеКак сравнить каждое значение с любым другим значением в pyspark?

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

Я хочу dataframe, который должен выглядеть следующим образом: -

(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() 

 Смежные вопросы

  • Нет связанных вопросов^_^