从 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 示例 - 有可用的吗?