根据列值对pyspark数据框进行分组并展平

时间:2018-07-05 06:16:52

标签: apache-spark pyspark pyspark-sql

我有一个看起来像这样的数据框:

amount1 amount2 period  customerId
3.0     4.0     weekly   12345
23.0    26.0    monthly  12345
201.0   190.0   yearly    12345
3.1     4.2     weekly   56789
21.2    36.5    monthly  56789
231.0   191.0   yearly    56789

我想像这样压扁它:

weekly_amt1 weekly_amt2 monthly_amt1 monthly_amt2 yearly_amt1 yearly_amt2 customerId
3.0         4.0         23.0         26.0         201.0       190.0       12345
3.1         4.2         21.2         36.5         231.0       191.0       56789

最有效的方法是什么? 我知道有一个pivot函数,但它似乎无法处理多于1列的数据透视,而且由于它昂贵,所以我不想多次透视。

1 个答案:

答案 0 :(得分:0)

我已经找到了答案:

def pivot_mult(df, cols):
    mydf = df.select('customerId').drop_duplicates()
    for c in cols:
        mydf = mydf.join(df.withColumn('combcol',\
               F.concat(F.lit('{}_'.format(c)),df['period']))\
                .groupby('customerId').pivot('combcol').\
                         agg(F.first(c)),'customerId')
    return mydf