Spark AVRO compatible with BigQuery



我正在尝试在蜂巢中创建一个外部表,而在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中。该模式也有一系列的结构,以及带有.

的名称空间。

最新更新