【发布时间】:2017-12-18 09:47:00
【问题描述】:
我正在尝试在 Hive 中创建一个外部表,并在 BigQuery 中创建另一个表,使用存储在 Google Storage 中的 Avro 格式的相同数据,使用 Spark 编写。
我正在使用带有 Spark 2.2.0、Spark-avro 4.0.0 和 Hive 2.1.1 的 Dataproc 集群
Avro 版本/包之间存在相同的差异,但如果我使用 Hive 创建表,然后使用 Spark 编写文件,我可以在 Hive 中看到它们。
但 BigQuery 不同,它可以读取 Hive Avro 文件,但不能读取 Spark Avro 文件。
错误:
The Apache Avro library failed to parse the header with the follwing error: Invalid namespace: .someField
搜索了一下错误,问题是 Spark Avro 文件与 Hive/BigQuery Avro 文件不同。
我不知道如何解决这个问题,可能是在 Spark 中使用不同的 Avro 包,但我还没有找到哪个与所有系统兼容。
另外我想避免棘手的解决方案,比如在 Hive 中创建一个临时表并使用 insert into ... select * from ... 创建另一个我会写很多数据,我想避免这种解决方案
任何帮助将不胜感激。谢谢
【问题讨论】:
-
错误是“无效的命名空间:.someField”。 “.someField”是正确的全名吗? avro.apache.org/docs/current/spec.html#names
-
这是另一个名称,但它正是其中一个字段的名称。其实就是一个 Array of Struct 字段的名称。 Avro 版本之间的架构定义似乎有些差异。
标签: apache-spark hive google-bigquery avro