千家信息网

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 河北企业软件开发销售电话 公司网络安全培训制度 数据库中已建立索引 信息与网络安全是干什么 徐州暑假网络安全课堂下载 轻量服务器的流量从哪天计算 末世进化是不是都在一个服务器 基金自选功能实现数据库设计 全国特殊设备从业人员数据库 络安网络安全吗 中国互联网与科技峰会
0