日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

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

欄目分類
最近更新