正在尝试读取avro文件。
val df = spark.read.avro(file)无法将运行到Avro架构中的字符串转换为Spark string:“StructType”,"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 =字符串)。源Avro模式:"null","string“。目标催化剂类型: StructType(StructField(value,StringType,true))
尝试覆盖avro架构(没有null)也不起作用:
val df = spark.read
.option("inferSchema", "false")
.option("avroSchema", """["string"]""")
.avro(file)Avro架构无法转换为Spark string:“StructType”
看起来spark-avro只创建了一个GenericDatumReaderGenericRecord,我需要一个GenericDatumReaderUtf8 :(
发布于 2018-12-02 19:42:29
请确保您提供的数据类型是正确的AVSC。" null ","String“用于处理Avro数据中的null值。您可以通过以下方式创建Avro文件的架构:
val schema = new Schema.Parser().parse(new File("user.avsc")或者,如果您有Java模式文件,则可以通过执行以下操作来获取模式:-
val schema = Schema.getClassSchema现在,一旦您有了模式,使用它构建数据框架就非常简单了。代码片段:-
val df =sparkSession.read.format("com.databricks.spark.avro")
.option("avroSchema", schema.toString)
.load("/home/garvit.vijay/000009_0.avro")
df.printSchema()
df.show()希望它能为你工作。
https://stackoverflow.com/questions/50864807
复制相似问题