我正在尝试在蜂巢中创建一个外部表,而在bigquery中使用avro格式中的Google存储中存储的相同数据在BigQuery中使用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软件包,但是我还没有发现哪个与所有系统兼容。
我也想避免在蜂巢中创建临时表,并使用 insert into ... select * from ...
创建另一个我会写大量数据,我想避免这种解决方案
任何帮助将不胜感激。谢谢
错误消息由BigQuery使用的C AVRO库抛出。Hive可能使用Java Avro库。C 库不喜欢命名空间以"。
开始这是库中的代码:
if (! ns_.empty() && (ns_[0] == '.' || ns_[ns_.size() - 1] == '.' || std::find_if(ns_.begin(), ns_.end(), invalidChar1) != ns_.end())) {
throw Exception("Invalid namespace: " + ns_);
}
spark-avro具有其他选项recordNamespace
来设置root namespace,因此它不会从.
开始。
https://github.com/databricks/spark-avro/blob/branch-4.0/readme-for-spark-versions.md
想知道您是否找到了这个答案。
我正在看到同一件事,我正在尝试将数据加载到BigQuery表中。该库首先以AVRO格式将数据加载到GCS中。该模式也有一系列的结构,以及带有.