google-bigquery - 将 Dataflow 模板 GCS 调试到 BigQuery
问题描述
我收到一些难以调试的奇怪错误。我正在运行一个简单的 UDF JavaScript 映射器,它映射 JSON 数据并将其导入 BigQuery。我以前运行过其他 UDF 函数,从未遇到过此类错误。
有什么方法可以调试(使用实际调试器或至少使用 console.log 或类似工具)Dataflow 模板 UDF 错误?
有问题的错误:
exception: "java.lang.RuntimeException: org.apache.beam.sdk.util.UserCodeException: java.lang.RuntimeException: java.lang.RuntimeException: org.json.JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1]
at com.google.cloud.dataflow.worker.GroupAlsoByWindowsParDoFn$1.output(GroupAlsoByWindowsParDoFn.java:183)
at com.google.cloud.dataflow.worker.GroupAlsoByWindowFnRunner$1.outputWindowedValue(GroupAlsoByWindowFnRunner.java:101)
at com.google.cloud.dataflow.worker.util.BatchGroupAlsoByWindowReshuffleFn.processElement(BatchGroupAlsoByWindowReshuffleFn.java:54)
at com.google.cloud.dataflow.worker.util.BatchGroupAlsoByWindowReshuffleFn.processElement(BatchGroupAlsoByWindowReshuffleFn.java:37)
at com.google.cloud.dataflow.worker.GroupAlsoByWindowFnRunner.invokeProcessElement(GroupAlsoByWindowFnRunner.java:114)
...
很难说这个错误是关于什么的:这个输入数据是格式错误还是从 UDF 输出 JSON?
到目前为止,我已经尝试了所有方法:
- 使用示例数据在本地对 UDF 进行单元测试
- 使用我尝试在真实环境中分析的完全相同的文件运行集成测试
- 在输入上使用空 JSON(带有空对象
{}
) - 使用了一个返回空 JSON 对象的 UDF 函数
任何有关调试 Dataflow UDF Javascript 的提示将不胜感激。
这些 Java 类的源代码是否可以在线获得?
解决方案
在这种情况下,罪魁祸首原来是 BigQuery Schema,它需要被包装到 JSON 对象中:
{
"BigQuery Schema": [
... schema goes here
]
}
以下代码可用于调试: TextIOToBigQuery.java
查看回购:https ://github.com/GoogleCloudPlatform/DataflowTemplates
推荐阅读
- swift - 在 willSet 和 didSet 中使用 NSLock
- r - 如何在R中生成N个最不相似的组合
- c# - 构建包含 JArray 的内联 JSON
- android - 谷歌播放订阅到期时间总是不断变化
- javascript - 如何将此脚本更改为自动滚动?
- mysql - Json 响应与数据库之间的数据不匹配
- javascript - 如何动态设置日期格式(uib-datepicker-popup="$ctrl.format")
- rxjs - 在 RxJS 中超时后发出错误
- excel - 关闭 vb.net 应用程序后 Excel 仍在运行
- javascript - 更改立方体 WebGL 的旋转