【发布时间】:2018-11-24 15:55:24
【问题描述】:
试图读取 avro 文件。
val df = spark.read.avro(file)
运行到 Avro 架构无法转换为 Spark SQL StructType: [ "null", "string" ]
尝试手动创建架构,但现在遇到以下问题:
val s = StructType(List(StructField("value", StringType, nullable = true)))
val df = spark.read
.option("inferSchema", "false")
.schema(s)
.avro(file)
com.databricks.spark.avro.SchemaConverters$IncompatibleSchemaException:无法将 Avro 架构转换为催化剂类型,因为路径上的架构不兼容 (avroType = StructType(StructField(value,StringType,true)),sqlType = STRING)。 源 Avro 架构:["null","string"]。 目标催化剂类型:StructType(StructField(value,StringType,true))
尝试覆盖 avro 架构(没有 null)也不起作用:
val df = spark.read
.option("inferSchema", "false")
.option("avroSchema", """["string"]""")
.avro(file)
Avro 架构无法转换为 Spark SQL StructType:[ "string" ]
看起来 spark-avro 只创建一个 GenericDatumReader[GenericRecord] 而我需要一个 GenericDatumReader[Utf8] :(
【问题讨论】:
-
你试过这个
val df = spark.read.option("inferSchema", "true").avro(file) -
是的,但是对于相同的结果,spark(正确)确定架构是 ["null", "string"] 的并集。
标签: apache-spark avro