我正在使用Kryo编码器将GenericRecords编码为spark DataFrame,并且正在将数据帧写入Avro文件。尝试从Hive读取文件后,我收到一条错误消息,提示解析器找到了toplevelrecord而不是期望的字段。该记录不在我现有的架构中,我认为当我使用spark-avro编写时会创建它。我想知道是否/如何将其从avro文件中删除。
它是这样的:
0.0.0.0
答案 0 :(得分:1)
在Avro架构(https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-AvroOptions.html)中必填
如果未在架构中设置值,则默认值 topLevelRecord 是默认值,但是您可以在写入数据框时提供一个值来覆盖它。
斯卡拉: 创建一个参数映射并将其传递给编写器:
val name = "AvroTest"
val parameters = Map("recordName" -> name)
df.write.options(parameters).format("avro").save("/tmp/output")
参考:https://docs.databricks.com/spark/latest/data-sources/read-avro.html
Python: 将选项传递给编写器,如下所示:
df.write.format("com.databricks.spark.avro").option("recordName", "Uber").save("tmp/output")