如何在PySpark中展开数组列并保留根列名(如col2.NM)
PySpark展开数组列并生成指定格式列名
要展开col2数组列并得到col1和col2.NM格式的列,你可以用explode函数先拆分数组,再提取结构体字段并重命名:
from pyspark.sql.functions import explode, col # 假设你的DataFrame名为df df_expanded = df.withColumn("col2_exploded", explode(col("col2"))) \ .select( "col1", col("col2_exploded.NM").alias("col2.NM") )
步骤说明:
- 拆分数组:
explode(col("col2"))会把col2数组中的每个struct元素拆成单独行,生成临时列col2_exploded。 - 提取并重命名字段:通过
col("col2_exploded.NM")提取结构体里的NM值,用alias("col2.NM")将列名设置为要求的col2.NM格式,最后保留col1和这个新列。
如果col2可能存在空数组,explode会过滤掉对应行。想保留这些行的话,改用explode_outer:
df_expanded = df.withColumn("col2_exploded", explode_outer(col("col2"))) \ .select( "col1", col("col2_exploded.NM").alias("col2.NM") )
这种方式下,空数组对应的col2.NM值会是null,不会丢失原有的col1数据。
内容的提问来源于stack exchange,提问作者ista120
相关产品推荐
相关产品推荐

