我尝试在hive中创建一个外部表,在bigquery中创建另一个外部表,使用的数据与使用spark编写的avro格式存储在google存储中的数据相同。
我使用的是带有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 ...
我会写很多数据,我想避免这种解决方案
任何帮助都将不胜感激。谢谢
3条答案
按热度按时间rt4zxlrg1#
spark avro还有其他选择
recordNamespace
设置根命名空间,因此它不会从.
.https://github.com/databricks/spark-avro/blob/branch-4.0/readme-for-old-spark-versions.md
iezvtpos2#
想知道你是否找到了答案。
我看到了同样的情况,我正在尝试将数据加载到bigquery表中。库首先以avro格式将数据加载到gcs中。模式也有一个struct数组,名称空间有一个
.
6rvt4ljy3#
错误消息由bigquery使用的cavro库抛出。hive可能使用javaavro库。c库不喜欢命名空间以“.”开头。
这是库中的代码: