pyspark行转列、列转行或宽表转窄表、窄表转宽表

列转行(宽表转窄表)
 
from pyspark.sql import functions as F


def unpivot(df, keys):
    # 参数说明 df  dataframe   keys 待转换表中需要保留的主键key,以list[]类型传入
    # 转换是为了避免字段类不匹配,统一将数据转换为string类型,如果保证数据类型完全一致,可以省略该句
    df = df.select(*[F.col(_).astype("string") for _ in df.columns])
    cols = [_ for _ in df.columns if _ not in keys]
    stack_str = ','.join(map(lambda x: "'%s', %s" % (x, x), cols))
    # feature, value 转换后的列名,可自定义
    df = df.selectExpr(*keys, "stack(%s, %s) as (feature, value)" % (len(cols), stack_str))
    return df

代码演示

 
 
行转列(窄表转宽表)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值