私のデータフレームには10,0000列があり、各グループにいくつかのロジックを適用する必要があります(キーは地域と部門です)。各グループは、10k 列から最大 30 列を使用します。30 列のリストは、2 番目のデータ セット列「colList」からのものです。各グループには 2 ~ 300 万行あります。私のアプローチは、キーごとにグループ化し、以下のように関数を呼び出すことです。しかし、それは失敗します - 1.シャッフルし、2.データグループが2Gを超えています(再パーティションで解決できますが、コストがかかります)、3.非常に遅い
def testfunc(iter):
<<got some complex business logic which cant be done in spark API>>
resRDD = df.rdd.groupBy(region, dept).map(lambda x: testfunc(x))
入力:
region dept week val0 val1 val2 val3 ... val10000
US CS 1 1 2 1 1 ... 2
US CS 2 1.5 2 3 1 ... 2
US CS 3 1 2 2 2.1 2
US ELE 1 1.1 2 2 2.1 2
US ELE 2 2.1 2 2 2.1 2
US ELE 3 1 2 1 2 .... 2
UE CS 1 2 2 1 2 .... 2
各グループで選択する列: (データセット 2)
region dept colList
US CS val0,val10,val100,val2000
US ELE val2,val5,val800,val900
UE CS val21,val54,val806,val9000
私の 2 番目の解決策は、30 列のみの入力データから新しいデータ セットを作成し、列の名前を col1 から col30 に変更することです。次に、列とグループごとにマッピング リストを使用します。次に、10K 列の元の入力よりもスキナーになる groupbyKey (仮定) を適用できます。
region dept week col0 col1 col2 col3 ... col30
US CS 1 1 2 1 1 ... 2
US CS 2 1.5 2 3 1 ... 2
US CS 3 1 2 2 2.1 2
US ELE 1 1.1 2 2 2.1 2
US ELE 2 2.1 2 2 2.1 2
US ELE 3 1 2 1 2 .... 2
UE CS 1 2 2 1 2 .... 2
10K の入力を 30 列に変換するのに役立つ人はいますか? または、グループ化を避けるために、他の代替手段を使用しても問題ありません。