0

以下に示すように、スパークにデータフレームがあります

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

次のようなデータフレームが必要です:-

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

したがって、両方の列のすべての可能な組み合わせを考慮する必要があります。これはどのように達成できますか?

デカルト結合を試しましたが、データセットが非常に小さいため時間がかかりすぎます。他の代替手段はありますか?

ありがとう。

4

2 に答える 2

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()
于 2016-06-27T09:37:10.110 に答える