【问题标题】:Spark read parquet with custom schemaSpark 使用自定义模式读取镶木地板
【发布时间】:2019-02-22 12:23:35
【问题描述】:

我正在尝试使用自定义架构导入镶木地板格式的数据,但它返回: TypeError: option() 缺少 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)
  • return Py4JJavaError: 调用 o1259.showString 时出错。 :org.apache.spark.SparkException:作业因阶段失败而中止:阶段 50.0 中的任务 0 失败 1 次,最近一次失败:阶段 50.0 中丢失任务 0.0(TID 660,本地主机,执行程序驱动程序):org.apache.spark .sql.execution.QueryExecutionException:Parquet 列无法在文件 file:///C:/Users/alexa/Downloads/product_nomenc/lu_product_nomenclature%252Fpart-r-00002-8c115acd-057f-43a5-b7dd-0e7d0ef1eb9e.gz 中转换。镶木地板。列:[id_sku],预期:IntegerType,找到:BINARY
  • spark.apache.org/docs/latest/api/scala/… 上查看有效签名(出于兴趣,为什么不使用 spark.read.parquet() 并推断架构?)

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-22
    • 2016-07-04
    • 1970-01-01
    • 2018-08-13
    • 2021-03-15
    • 2021-05-27
    • 2018-12-28
    • 2021-12-28
    相关资源
    最近更新 更多