2017-09-30 12 views
0

データフレームにあるすべての列の組み合わせに基づいて得意先を取得したいと考えています。スパークデータフレーム内の複数の列に集約(すべての組み合わせ)

例: - 5列のデータフレームがあるとします。すべての順列と組み合わせのためのように

id, col1, count(cust_id) 
    id, col1, col2, count(cust_id) 
    id, col1, col3, count(cust_id) 
    id, col1, col2, col3, count(cust_id) 
    id, col2, count(cust_id) 
    id, col2, col3, count(cust_id) 

そして:

ID、COL1、COL2、COL3は、

をCUST_ID私はすべての組み合わせに対する顧客の数を必要とします。

それは、データフレームのgroupBy機能にすべての異なる組み合わせを別々に提供し、顧客の数を集計することは非常に困難です。

これを実現する方法はありますか?すべての結果を1つのデータフレームに追加して結果を1つの出力ファイルに書き込むことができますか?

私には少し複雑に見えますが、いずれかの解決策があれば本当に感謝します。詳細が必要な場合はお知らせください。

ありがとうございます。

+0

ラウル、ありがとうございました。 –

+0

こんにちはRaul、CUBEの2つのセットとして(col1、col2)、(col3、col4)のようなキューブ関数でcolのセットを与えることは可能ですか? –

答えて

1

それはand it is called cube可能です:

df.cube("id", "col1", "col2", "col3").agg(count("cust_id")) 
    .na.drop(minNonNulls=3) // To exclude some combinations 

SQLバージョンも.na.dropよりも効率的な場合がありGROUPING SETを提供します。

+0

こんにちはラウル、 (col1、col2)、(col3、col4)のようなキューブ関数のCUBEの2つのセット –

関連する問題