databricks avro 架构无法转换为 Spark SQL 结构类型

Posted

技术标签:

【中文标题】databricks avro 架构无法转换为 Spark SQL 结构类型【英文标题】:databricks avro schema cannot be converted to a Spark SQL structtype 【发布时间】:2017-07-13 07:30:39 【问题描述】:

我们有 kakfa hdfs 连接器以默认 avro 格式写入 hdfs。示例 o/p:

Obj^A^B^Vavro.schema"["null","string"]^@$ͳø¾Ã^X:uV^K^H5^F°^F^B^B"severity":"notice","message":"测试消息","facility":"kern","syslog-tag":"sawmill_test:","timestamp":"2017-01- 31T20:15:00+00:00"^B^B"severity":"notice","message":"Test message","facility":"kern","syslog-tag": "sawmill_test:","timestamp":"2017-01-31T20:15:00+00:00"^B^B"severity":"notice","message":"测试消息", "facility":"kern","syslog-tag":"sawmill_test:","timestamp":"2017-01-31T20:15:00+00:00"$ͳø¾Ã^X:uV^K^H5

尝试阅读使用:

import com.databricks.spark.avro._
    val df = spark.read.avro("..path to avro file")

我们得到以下错误

java.lang.RuntimeException:Avro 架构无法转换为 Spark SQL StructType: [“空”,“字符串”] 在 com.databricks.spark.avro.DefaultSource.inferSchema(DefaultSource.scala:93) 在 org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:184) 在 org.apache.spark.sql.execution.datasources.DataSource$$anonfun$7.apply(DataSource.scala:184) 在 scala.Option.orElse(Option.scala:289) 在 org.apache.spark.sql.execution.datasources.DataSource.org$apache$spark$sql$execution$datasources$DataSource$$getOrInferFileFormatSchema(DataSource.scala:183) 在 org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:387) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:135) 在 com.databricks.spark.avro.package$AvroDataFrameReader$$anonfun$avro$2.apply(package.scala:34) 在 com.databricks.spark.avro.package$AvroDataFrameReader$$anonfun$avro$2.apply(package.scala:34)

请帮忙

Spark 版本:2.11

Spark-avro 版本:2.11-3.2.0

kafka 版本:0.10.2.1

【问题讨论】:

【参考方案1】:

您的 avro 格式文件不正确。架构必须是 type:record。抱歉,我无法附加有效的 avro 格式文件。 但是你可以参考这个链接。 Sample Avro format file

avro.schema¨"type":"record"

从 spark 你所做的一切都很好。

import com.databricks.spark.avro._
sqlContext.read.avro(..paht of file)

【讨论】:

以上是关于databricks avro 架构无法转换为 Spark SQL 结构类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 Databricks 中的原始 SQL 直接查询存储在 Azure Data Lake 中的 avro 数据文件

java.lang.NoClassDefFoundError: com/databricks/spark/avro/package$

使用 Databricks 将十进制字段加载到 Redshift 表时出现 Avro 文件错误

使用 Azure EventHubs Capture 生成的 Azure Data Lake Gen1 中的 Databricks 读取 avro 数据失败

使用 PIG 查询 Avro 数据时出错,Utf8 无法转换为 java.lang.String

无法将 Catalyst 类型 IntegerType 转换为 Avro 类型 ["null","int"]