提问者:小点点

火花读取镶木地板与自定义架构


我正在尝试使用自定义模式导入镶木地板格式的数据,但它返回: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)

共2个答案

匿名用户

如注释中所述,您应该将. option(schema)更改为.schema(schema)选项()要求您指定一个(您要设置的选项的名称)和一个(您要分配给该选项的值)。您获得TypeError是因为您只是将一个名为schema的变量传递给选项而没有指定您实际尝试使用该变量设置的选项。

您在注释中发布的QueryExecutionException正在引发,因为您在schema变量中定义的模式与DataFrame中的数据不匹配。如果您要指定自定义模式,您必须确保模式与您正在读取的数据匹配。在您的示例中,列id_sku存储为BinaryType,但在您的模式中,您将列定义为IntegerTypepyspark不会尝试协调您提供的模式与数据中的实际类型之间的差异,并且会引发异常。

要修复您的错误,请确保您定义的模式正确地表示存储在parque文件中的数据(即将模式中id_sku的数据类型更改为BinaryType)。这样做的好处是,您不必在每次读取parque文件时推断文件模式,从而获得轻微的性能提升。

匿名用户

使用. option(schema=ProductCustomSchema)