我们将kakfa hdfs连接器以默认的avro格式写入hdfs。样本o / p:
的OBJ ^ A ^ B ^ Vavro.schema “[” 空”, “字符串”] ^ @ $ͳø{<图9d>¾Ã^ X:其中8D> UV ^ K ^ H5 ^ F°^ F ^ B< 8a> ^ B {“severity”:“notice”,“message”:“测试消息”,“设施”:“kern”,“syslog-tag”:“sawmill_test:”,“timestamp”:“2017- 01-31T20:15:00 + 00:00“} ^ B< 8a> ^ B {”severity“:”notice“,”message“:”测试消息“,”设施“:”kern“,”syslog-tag “:”sawmill_test:“,”timestamp“:”2017-01-31T20:15:00 + 00:00“} ^ B< 8a> ^ B {”severity“:”notice“,”message“:”测试消息”, “设施”: “克恩”, “系统记录标签”: “sawmill_test:”, “时间戳”: “2017-01-31T20:15:00 + 00:00”} $ͳø{<图9d>¾Ã^ X:其中8D> UV ^ K ^ H5
尝试阅读:
import com.databricks.spark.avro._
val df = spark.read.avro("..path to avro file")
我们收到以下错误
java.lang.RuntimeException:无法将Avro架构转换为Spark SQL StructType: [“null”,“string”] at 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) at com.databricks.spark.avro.package $ AvroDataFrameReader $$ anonfun $ avro $ 2.apply(package.scala:34) at 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
答案 0 :(得分:0)
您的avro格式文件不正确。架构必须是type:record。无法附加有效的avro格式文件,对不起。 但是你可以参考这个链接。 Sample Avro format file
avro.schema¨{"type":"record"
从火花中你所做的一切都很好。
import com.databricks.spark.avro._
sqlContext.read.avro(..paht of file)