【发布时间】:2019-02-04 15:18:57
【问题描述】:
我正在从 Dataflow 读取 BigQuery 表,其中一个字段是“记录”和“重复”字段。所以我预计 Java 中生成的数据类型是 List<TableRow>。
但是,当我尝试遍历列表时,出现以下异常:
java.lang.ClassCastException:java.util.LinkedHashMap 无法转换为 com.google.api.services.bigquery.model.TableRow
表架构如下所示:
{
"id": "my_id",
"values": [
{
"nested_record": "nested"
}
]
}
迭代值的代码如下所示:
String id = (String) row.get("id");
List<TableRow> values = (List<TableRow>) row.get("values");
for (TableRow nested : values) {
// more logic
}
异常在循环开始的地方被抛出。
这里明显的解决方法是将值转换为 LinkedHashMaps 的列表,但这感觉不对。
为什么 Dataflow 会为嵌套的“记录”抛出这种错误?
【问题讨论】:
-
为什么感觉不对?使用
List<LinkedHashMap>(或类似的)实际上是你能做的所有事情(也是正确的事情),因为这是列表中实例的类型。 -
谢谢@AndyTurner,你有没有链接到某个文档,上面写着“记录”是Java 中的LinkedHashMap。我发现的关于它的 GCP 页面真的很模糊
标签: java google-bigquery google-cloud-dataflow