首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与BigQuery兼容的Spark AVRO

与BigQuery兼容的Spark AVRO
EN

Stack Overflow用户
提问于 2017-12-18 17:47:00
回答 3查看 438关注 0票数 1

我正在尝试在Hive中创建一个外部表,并在BigQuery中创建另一个表,使用与Spark编写的Avro格式存储在Google Storage中的相同数据。

我使用的是带有Spark 2.2.0、Spark-avro 4.0.0和Hive 2.1.1的Dataproc集群

Avro版本/包之间有相同的差异,但如果我使用Hive创建表,然后使用Spark编写文件,我可以在Hive中看到它们。

但对于BigQuery是不同的,它可以读取Hive Avro文件,但不能读取Spark Avro文件。

错误:

代码语言:javascript
复制
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 ...创建另一个表,我将写入大量数据,我希望避免这种解决方案

任何帮助都将不胜感激。谢谢

EN

回答 3

Stack Overflow用户

发布于 2017-12-19 16:57:31

错误消息是由BigQuery使用的C++ Avro库抛出的。Hive可能使用Java Avro库。C++库不喜欢名称空间以".“开头。

以下是库中的代码:

代码语言:javascript
复制
if (! ns_.empty() && (ns_[0] == '.' || ns_[ns_.size() - 1] == '.' || std::find_if(ns_.begin(), ns_.end(), invalidChar1) != ns_.end())) {
  throw Exception("Invalid namespace: " + ns_);
}
票数 1
EN

Stack Overflow用户

发布于 2019-07-09 02:27:51

. -avro有额外的选项recordNamespace来设置根命名空间,所以它不会从Spark启动。

https://github.com/databricks/spark-avro/blob/branch-4.0/README-for-old-spark-versions.md

票数 1
EN

Stack Overflow用户

发布于 2018-01-09 10:56:23

想知道你是否找到了答案。

我看到了同样的事情,我试图将数据加载到bigquery表中。该库首先将数据以avro格式加载到GCS中。该模式也有一个结构数组,名称空间以一个.开头

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47865688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档