如何在PySpark中移除数组内结构体的item_platform_id字段
解决PySpark中移除数组内结构体字段的问题
普通的drop方法没法直接移除嵌套在数组里的结构体字段,因为drop只能操作顶层列,针对你这种场景,需要重新构造整个ITEMS数组列,以下是两种可行的方法:
方法一:使用transform + struct函数
通过transform遍历数组中的每个结构体元素,用struct只保留需要的字段,自动剔除不需要的item_platform_id:
from pyspark.sql import functions as F # 重新构造ITEMS列,保留结构体里的_id和quantity字段 df = df.withColumn( "ITEMS", F.transform( F.col("ITEMS"), lambda item: F.struct( item["_id"].alias("_id"), item["quantity"].alias("quantity") ) ) )
方法二:使用selectExpr
通过SQL表达式生成新的ITEMS列,再替换原列:
# 生成新的ITEMS列后替换原列 df = df.selectExpr( "*", "transform(ITEMS, x -> struct(x._id, x.quantity)) as new_ITEMS" ).drop("ITEMS").withColumnRenamed("new_ITEMS", "ITEMS")
执行完上述任意一种方法后,运行df.printSchema()就能看到ITEMS数组内的结构体已经移除了item_platform_id字段,和你预期的Schema一致。
内容的提问来源于stack exchange,提问作者Caroline Leite
相关产品推荐
相关产品推荐

