spark中如何实现行列转换即宽表窄表转换
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,spark中如何实现行列转换即宽表窄表转换,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。不定期上代码干货spark列转行
千家信息网最后更新 2025年12月03日spark中如何实现行列转换即宽表窄表转换
spark中如何实现行列转换即宽表窄表转换,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
不定期上代码干货
spark列转行
from pyspark import SparkContext, SparkConffrom pyspark.sql import SparkSession, SQLContext, Row, functions as Ffrom pyspark.sql.functions import array, col, explode, struct, litconf = SparkConf().setAppName("test").setMaster("local[*]")sc = SparkContext(conf=conf)spark = SQLContext(sc)# df is datasource, by will exclude columndef df_columns_to_line(df, by): # Filter dtypes and split into column names and type description df_a = df.select([col(c).cast("string") for c in df.columns]) cols, dtypes = zip(*((c, t) for (c, t) in df_a.dtypes if c not in by)) # Spark SQL supports only homogeneous columns assert len(set(dtypes)) == 1, "All columns have to be of the same type" # Create and explode an array of (column_name, column_value) structs kvs = explode(array([ struct(lit(c).alias("feature"), col(c).alias("value")) for c in cols ])).alias("kvs") return df_a.select(by + [kvs]).select(by + ["kvs.feature", "kvs.value"])df = sc.parallelize([(1, 0.0, 0.6), (1, 0.6, 0.7)]).toDF(["A", "col_1", "col_2"])df_row_data = df_columns_to_line(df, ["A"])df.show()df_row_data.show()>>> df.show()+---+-----+-----+| A|col_1|col_2|+---+-----+-----+| 1| 0.0| 0.6|| 1| 0.6| 0.7|+---+-----+-----+>>> df_row_data.show()+---+-------+-----+| A|feature|value|+---+-------+-----+| 1| col_1| 0.0|| 1| col_2| 0.6|| 1| col_1| 0.6|| 1| col_2| 0.7|+---+-------+-----+
注意feature和value是原多列名转换为行数据后,重新定义的最终两列名
spark行转列
df_features = df_row_data.select('feature').distinct().collect()features = map(lambda r:r.feature, df_features)df_column_data = df_row_data.groupby("A").pivot('feature', features).agg(F.first('value', ignorenulls=True))df_column_data.show()+---+-----+-----+| A|col_2|col_1|+---+-----+-----+| 1| 0.6| 0.0|+---+-----+-----+
行转列比较简单,在上文结果基础上直接转换,关键是pivot函数的使用
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
帮助
行列
清楚
上代
上文
关键
内容
函数
基础
对此
干货
数据
文章
新手
更多
知识
结果
行业
资讯
资讯频道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
幼儿园亲子电信网络安全教育
自学网络技术可以吗
我国当前数据库发展的现状
江苏海航软件开发收费标准
网络安全等级测评报告结果
jsp数据库多表查询
计算机网络技术学期总结
还原数据库失败因为结果数
网络安全和信息处置制度
吉林网络安全专业排名
浦东新区新能源网络技术工业化
末世进化是不是都在一个服务器
sql数据库没了怎么查看
工业网络技术基础题
个人网络安全类型一般选什么
网络技术的主要组成部分
玉器鉴定软件开发
衡水手机软件开发
免费http代理服务器ip
河北企业软件开发销售电话
公司网络安全培训制度
数据库中已建立索引
信息与网络安全是干什么
徐州暑假网络安全课堂下载
轻量服务器的流量从哪天计算
末世进化是不是都在一个服务器
基金自选功能实现数据库设计
全国特殊设备从业人员数据库
络安网络安全吗
中国互联网与科技峰会