如何在PySpark的多层嵌套结构体中添加子字段?
在PySpark多层结构体中修改嵌套字段的方法
可以通过withColumn结合PySpark的struct函数重新构造嵌套结构体,实现将Information.Name改为包含firstName和lastName的嵌套结构,同时保留原有字段。
步骤示例
- 导入必要的函数
from pyspark.sql import functions as F
- 重新构造嵌套结构体
假设原DataFrame名为df,以下示例以拆分原Name字符串生成firstName和lastName为例:
df_modified = df.withColumn( "Information", F.struct( # 构造新的Name嵌套结构体 F.struct( F.split(F.col("Information.Name"), " ").getItem(0).alias("firstName"), F.split(F.col("Information.Name"), " ").getItem(1).alias("lastName") ).alias("Name"), # 保留原Information中的Age和Gender字段 F.col("Information.Age"), F.col("Information.Gender") ) )
如果不需要基于原Name值生成,而是直接初始化空值或固定值,可调整为:
df_modified = df.withColumn( "Information", F.struct( F.struct( F.lit(None).alias("firstName"), F.lit(None).alias("lastName") ).alias("Name"), F.col("Information.Age"), F.col("Information.Gender") ) )
- 验证修改后的Schema
df_modified.printSchema()
执行后会输出期望的结构:
root |-- ID: ... (原类型) |-- Information: struct (nullable = false) | |-- Name: struct (nullable = true) | | |-- firstName: ... (对应类型) | | |-- lastName: ... (对应类型) | |-- Age: ... (原类型) | |-- Gender: ... (原类型) |-- Description: ... (原类型)
内容的提问来源于stack exchange,提问作者Padfoot123
相关产品推荐
相关产品推荐

