spark中如何实现行列转换即宽表窄表转换
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,spark中如何实现行列转换即宽表窄表转换,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。不定期上代码干货spark列转行
千家信息网最后更新 2024年09月22日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安全错误
数据库的锁怎样保障安全
php连接数据库示例
查看某个数据库的所有表
软件开发源成分
数据库怎么创建登录名
网络安全工程师证书照片
网络安全法规定的选择有
赵志宏共建网络安全环境
网络安全考什么大学
软件开发合同解除的后果
煤矿通讯网络技术员必会题库
彩票拿到购买数据库
搞网络安全的公司
导入数据库错误114
无法与服务器安全了解
网络安全审查办法自什么时候开始
云服务器 实例名称
怎样进去腾讯云服务器
软件开发规范及流程
数据库字段增删改
c向数据库添加数据
sqlite建数据库
易享极合科技互联网趋势
软件开发增量模型图
数据库怎么创建登录名
网络安全与金融稳定的联系
彩票拿到购买数据库
计算机考研数据库原理怎么调剂
统计局网络安全检查简报
群晖服务器速度慢怎么解决
软件开发规范及流程