spark中如何实现行列转换即宽表窄表转换
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,spark中如何实现行列转换即宽表窄表转换,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。不定期上代码干货spark列转行
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
了解未来网络安全的发展超势
腾讯服务器ip地址怎么换
网络安全和信息道德教案
网络安全法治理目标
2018网络安全防护赛
分管滁州网络安全
网络安全最佳案例评选策划书
软件开发私活去哪接
广西数据网络技术分类工程
对软件开发的赞美
软件开发属于销售还是服务
软件开发有什么政策风险
笔记本的服务器ip账号密码
打印服务器固件openwrt
互联网金融到科技金融
中网易信软件开发
工业网络技术专业人培
服务器被挖矿会怎样
长三角示范区国家网络安全宣传
饥荒只有服务器模组
三门峡华太通讯网络技术
广东程序软件开发大概要多少钱
vb 数据库升序排列
计算机网络技术专业实习在哪里
华为服务器改名超聚变了吗
网络安全保护电话
南皮农商银行网络安全
软件开发私活去哪接
数据库同步复制笔记
软件开发对数学又要求吗