我正在尝试使用自定义模式导入镶木地板格式的数据,但它返回:TypeError:选项()缺少1个所需的位置参数:'value'
ProductCustomSchema = StructType([
StructField("id_sku", IntegerType(), True),
StructField("flag_piece", StringType(), True),
StructField("flag_weight", StringType(), True),
StructField("ds_sku", StringType(), True),
StructField("qty_pack", FloatType(), True)])
def read_parquet_(path, schema) :
return spark.read.format("parquet")\
.option(schema)\
.option("timestampFormat", "yyyy/MM/dd HH:mm:ss")\
.load(path)
product_nomenclature = 'C:/Users/alexa/Downloads/product_nomenc'
product_nom = read_parquet_(product_nomenclature, ProductCustomSchema)
如注释中所述,您应该将. option(schema)
更改为.schema(schema)
。选项()
要求您指定一个键
(您要设置的选项的名称)和一个值
(您要分配给该选项的值)。您获得TypeError
是因为您只是将一个名为schema
的变量传递给选项
而没有指定您实际尝试使用该变量设置的选项。
您在注释中发布的QueryExecutionException
正在引发,因为您在schema
变量中定义的模式与DataFrame中的数据不匹配。如果您要指定自定义模式,您必须确保模式与您正在读取的数据匹配。在您的示例中,列id_sku
存储为BinaryType
,但在您的模式中,您将列定义为IntegerType
。pyspark
不会尝试协调您提供的模式与数据中的实际类型之间的差异,并且会引发异常。
要修复您的错误,请确保您定义的模式正确地表示存储在parque文件中的数据(即将模式中id_sku
的数据类型更改为BinaryType
)。这样做的好处是,您不必在每次读取parque文件时推断文件模式,从而获得轻微的性能提升。
使用. option(schema=ProductCustomSchema)