从 Dataproc 写入 BigQuery 时在哪里可以找到错误?

Posted

技术标签:

【中文标题】从 Dataproc 写入 BigQuery 时在哪里可以找到错误?【英文标题】:Where to find errors when writing to BigQuery from Dataproc? 【发布时间】:2019-08-08 08:33:50 【问题描述】:

我正在使用 BigQuery 连接器将数据集从 Dataproc 作业写入 Bigquery。我正在使用 JSON 编写,但有时会出现此错误:

Caused by: java.io.IOException: Error during BigQuery job execution:
"location":"tempOutputLocation",
 "message":"Error while reading data, error message: JSON table encountered too many errors,"
           "giving up. Rows: 3; errors: 1. Please look into the errors[] collection for" 
           "more details.",
 "reason":"invalid"

我确实理解这条消息的含义,我什至可以在大多数情况下修复它,但找不到他们正在谈论的errors[] collection 让我很困扰。这是令人沮丧的,因为在没有它的情况下解决问题的唯一方法是查看生成的 json,猜测错误并尝试修复它。这个集合可能会让事情变得更容易!

我查看了我的 dataproc 存储桶,但找不到任何错误集合。

任何关于如何获得它的想法将不胜感激!

编辑:有关错误的更多详细信息

我正在这样写 BigQuery(经典方法):

// Prepare Configuration
BigQueryOutputConfiguration.configure(
  conf,
  path,
  schema,
  tempBucket,
  BigQueryFileFormat.NEWLINE_DELIMITED_JSON,
  classOf[TextOutputFormat[_, _]]
)

// Create Json from case class value using Gson and save to BigQuery
output.rdd.map(value => (null, new GsonBuilder()
  .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
  .create()
  .toJsonTree(value)
)).saveAsNewAPIHadoopDataset(conf)

现在,有时 Json 值存在一些错误,BigQuery 不满意。例如:

// With a schema like that
val schema: BigQueryTableSchema = new BigQueryTableSchema().setFields(List(
    new BigQueryTableFieldSchema().setName("field").setType("STRING").setMode("NULLABLE")
).asJava

// Error will be raised if I try to write a Json like :
case class MyClass(field: Double)
val json = new Gson().toJson(MyClass(3.14))

在这里,我的 Dataproc 作业将失败,返回上面提到的错误。有道理,因为我提供的是 Double 而不是 String。但有时它更棘手,比如小数太多。

无论如何,错误消息清楚地提到了Please look into the errors[] collection for more details.,我希望在某个地方有一个集合,其中包含比JSON table encountered too many errors 更详细的错误信息。但我找不到。

【问题讨论】:

你能告诉我问题是什么吗?我想重现这个问题。 @Dagang,我已经提供了更多关于如何重现的信息。如果您需要更多,请告诉我。 【参考方案1】:

我重现了这个问题,BigQuery API 返回的errors 被 BigQuery 连接器丢弃。我为 BQ 连接器提交了issue。我们将在下一个版本中修复。

【讨论】:

以上是关于从 Dataproc 写入 BigQuery 时在哪里可以找到错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Spark-BigQuery_connector 用于现有的 spark 环境(不使用 google dataproc)

Google Cloud Dataproc 删除 BigQuery 表不起作用

使用 scala 从 spark 中删除 bigquery 表

Dataproc + BigQuery 示例 - 有可用的吗?

使用 Spark BigQuery 连接器启动 Dataproc 集群

Dataproc 笔记本无法导入或导出到 BigQuery:找不到类异常