热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

列转行(宽表转窄表)frompyspark.sqlimportfunctionsasFdefunpivot(df,keys):#参数说明dfdatafr
列转行(宽表转窄表)


from pyspark.sql import functions as Fdef 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

代码演示







行转列(窄表转宽表)


from pyspark.sql import functions as Fdef pivot(df, keys, column, column_value, column_value_list):# 参数说明 df  dataframe   keys 待转换表中需要保留的主键key,以list[]类型传入 # column 待转换的列名  column_value column对应值的列名  column_value_list column内需要成列值,也是新生成表的列名# .fillna(-999.0)  行转列时有时对应的列没有值,就会产生null值,fillna会对null做处理,转换为其他值,如不需要可以删除return df.groupBy(keys).pivot(column, column_value_list).agg(F.first(column_value, ignorenulls=True)).fillna(-999.0)

代码演示







推荐阅读
author-avatar
mobiledu2502872733
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有