我的PySpark数据框架有以下模式:
schema = spark_df.printSchema()
root
|-- field_1: double (nullable = true)
|-- field_2: double (nullable = true)
|-- field_3 (nullable = true)
|-- field_4: double (nullable = true)
|-- field_5: double (nullable = true)
|-- field_6: double (nullable = true)
我想在模式中再添加一个StructField,所以新的模式看起来像:
root
|-- field_1: double (nullable = true)
|-- field_1: double (nullable = true)
|-- field_2: double (nullable = true)
|-- field_3 (nullable = true)
|-- field_4: double (nullable = true)
|-- field_5: double (nullable = true)
|-- field_6: double (nullable = true)
我知道我可以像下面这样手动创建一个new_schema:
new_schema = StructType([StructField("field_0", StringType(), True),
:
StructField("field_6", IntegerType(), True)])
这适用于少量字段,但如果我有数百个字段则无法生成。所以我想知道是否有一种更优雅的方式来添加一个新字段到模式的开始?谢谢!
您可以复制现有字段并添加:
to_prepend = [StructField("field_0", StringType(), True)]
StructType(to_prepend + df.schema.fields)
这个问题似乎是问如何在模式中添加一个字段,但是请注意,如果您只想添加一个字段,那么这可以通过StructType.add(field)
方法实现。如:
#define some schema
schema = StructType([
StructField('Field 1', StringType(), True),
StructField('Field 2', StringType(), True)
])
#add a field
schema.add('Field 3', StringType(), True)
#create empty dataframe from schema and test
df = spark.createDataFrame(data=[], schema=schema)
df.printSchema()