学无先后,达者为师

网站首页 编程语言 正文

pyspark 中dataframe 按指定字段拆分为多列或者多行

作者:leap_ruo 更新时间: 2022-07-26 编程语言

背景

在使用dataframe时,我们常常需要依据应用场景,需要将原来一条record 拆分为多行(字段数增加1个,record增加),或者在一个record中根据已有字段拆分为多列(仍是1个record,字段数增加)

拆分为多个字段(多列)

from pyspark.sql import functions
# 假设需要将字段col_1的内容按照‘@’字符拆分为两个字段
# col_new_1, col_new2
# your_df 为已加载dataframe
split_col = functions.split(your_df['col_1'], '@')  # 拆分
your_df = your_df.withColumn('col_new_1', split_col.getItem(0))  # 新增col_new_1字段
your_df = your_df.withColumn('col_new_2', split_col.getItem(1))  # 新增col_new_2字段

拆分为多个record(多行)

from pyspark.sql import functions
# 假设已有字段col_list=[1,2,3],需要按照该字段的每个元素,作为新的一列,且每个元素都为新的一行。举例如下:
# col_name	col_list
# 'name1'	[1,2,3]
# ====>
# col_name	col_list	new_col
# 'name1'	[1,2,3]	1
# 'name1'	[1,2,3]	2
# 'name1'	[1,2,3]	3
# 仍然假设 your_df 为已加载dataframe
your_df = your_df.withColumn('new_col', functions.explode('col_list')) # 拆分,并生成多行

这里个functions.explode和hive中的explode作用类似,可参考
链接: json解析中的explode使用

其他

这里还有另外一个问题,如果我们原始数据并没规律的以@分割的固定格式字段,或者原始数据中并没有事先准备好的array格式的字段,如何生成呢?——使用udf生成
udf的使用,可以参见pyspark中udf写法及其使用

原文链接:https://blog.csdn.net/Airstudy/article/details/125983835

栏目分类
最近更新