如何在PySpark中创建空的struct类型列?
问题原因
PySpark的F.struct()方法不支持无参数调用,必须传入至少1个列表达式,因此直接调用F.struct()会触发参数校验报错。
解决方法
根据你需要的空struct类型,选择对应方案:
方案1:创建完全无字段的空struct列
直接指定类型为空白StructType即可,生成的列所有值为null:import pyspark.sql.functions as F from pyspark.sql.types import StructType df = df.withColumn('newCol', F.lit(None).cast(StructType()))方案2:创建带预设字段的空struct列
多数场景下你需要的是有固定字段结构的struct,只是初始状态下所有字段值为null,此时可以自定义Struct的字段结构后再做类型转换:import pyspark.sql.functions as F from pyspark.sql.types import StructType, StructField, IntegerType, StringType # 自定义你需要的struct字段和对应类型 custom_struct_schema = StructType([ StructField("id", IntegerType(), nullable=True), StructField("name", StringType(), nullable=True) ]) df = df.withColumn('newCol', F.lit(None).cast(custom_struct_schema))
扩展操作
如果后续需要往已创建的空struct列中新增字段,可以直接调用withField方法:
df = df.withColumn("newCol", F.col("newCol").withField("age", F.lit(20)))
内容的提问来源于stack exchange,提问作者AlienDeg
相关产品推荐
相关产品推荐

