首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark read avro

Spark read avro
EN

Stack Overflow用户
提问于 2018-06-15 03:43:36
回答 1查看 6.2K关注 0票数 1

正在尝试读取avro文件。

代码语言:javascript
复制
val df = spark.read.avro(file)

无法将运行到Avro架构中的字符串转换为Spark string:“StructType”,"string“

尝试手动创建架构,但现在遇到以下问题:

代码语言:javascript
复制
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)也不起作用:

代码语言:javascript
复制
val df = spark.read
  .option("inferSchema", "false")
  .option("avroSchema", """["string"]""")
  .avro(file)

Avro架构无法转换为Spark string:“StructType”

看起来spark-avro只创建了一个GenericDatumReaderGenericRecord,我需要一个GenericDatumReaderUtf8 :(

EN

回答 1

Stack Overflow用户

发布于 2018-12-02 19:42:29

请确保您提供的数据类型是正确的AVSC。" null ","String“用于处理Avro数据中的null值。您可以通过以下方式创建Avro文件的架构:

代码语言:javascript
复制
val schema = new Schema.Parser().parse(new File("user.avsc")

或者,如果您有Java模式文件,则可以通过执行以下操作来获取模式:-

代码语言:javascript
复制
val schema = Schema.getClassSchema

现在,一旦您有了模式,使用它构建数据框架就非常简单了。代码片段:-

代码语言:javascript
复制
val df =sparkSession.read.format("com.databricks.spark.avro")
      .option("avroSchema", schema.toString)
      .load("/home/garvit.vijay/000009_0.avro")

df.printSchema()
df.show()

希望它能为你工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50864807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档