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 数据失败