我正在尝试使用自定义架构以镶木地板格式导入数据,但它返回: TypeError:option()缺少1个必需的位置参数:“值”
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)
答案 0 :(得分:0)
如评论中所述,您应将.option(schema)
更改为.schema(schema)
。 option()
要求您指定key
(要设置的选项的名称)和value
(要为该选项分配的值)。之所以得到TypeError
,是因为您只是向schema
传递了一个名为option
的变量,而没有指定实际上要使用该变量设置的选项。
由于您在QueryExecutionException
变量中定义的架构与DataFrame中的数据不匹配,因此引发了您在注释中发布的schema
。如果要指定自定义架构,则必须确保该架构与您正在读取的数据匹配。在您的示例中,列id_sku
存储为BinaryType
,但是在您的架构中,您将列定义为IntegerType
。 pyspark
不会尝试协调您提供的架构与数据中实际类型之间的差异,并且会引发异常。
要解决错误,请确保定义的架构正确地表示了存储在镶木地板文件中的数据(即,将架构中的id_sku
的数据类型更改为BinaryType
)。这样做的好处是,不必在每次读取镶木地板文件时都推断文件模式,从而可以稍微提高性能。