gpt4 book ai didi

java - 使用 Spark-avro 写入数据帧创建 topLevelRecord - 想要使用现有架构

转载 作者:行者123 更新时间:2023-11-30 06:06:13 27 4
gpt4 key购买 nike

我正在使用 Kryo 编码器将 GenericRecords 编码为 Spark DataFrame,并将数据帧写入 Avro 文件。当我尝试从 Hive 读取文件时,我收到一条错误消息,指出解析器找到了顶级记录而不是预期的字段。该记录不在我现有的模式中,我认为它是在我使用 Spark-avro 写入时创建的。我想知道是否/如何从 avro 文件中删除它。

这就是它的样子:

{
"type":"record",
"name":"topLevelRecord",
"fields":[
{
"name":"value",
"type":["bytes","null"]
}
]
}

最佳答案

名称字段在 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")

关于java - 使用 Spark-avro 写入数据帧创建 topLevelRecord - 想要使用现有架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51271517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com