java - 如何使用数据流在嵌套数组中加载数据
问题描述
我正在尝试将数据加载到下表中。我能够在“array_data”中加载数据。但是如何在嵌套数组“inside_array”中加载数据。我已经尝试了注释部分来加载 inside_array 数组中的数据,但它不起作用。 在此处输入图像描述
这是我的代码。- Pipeline p = Pipeline.create(options);
org.apache.beam.sdk.values.PCollection<TableRow> output = p.apply(org.apache.beam.sdk.transforms.Create.of("temp"))
.apply("O/P",ParDo.of(new DoFn<String, TableRow>() {
/**
*
*/
private static final long serialVersionUID = 307542945272055650L;
@ProcessElement
public void processElemet(ProcessContext c) {
TableRow row = new TableRow();
row.set("name","Jack");
row.set("phone","9874563210");
TableRow ip = new TableRow().set("address", "M G Road").set("email","abc@gmail.com");
TableRow ip1 = new TableRow().set("address","F C Road").set("email","xyz@gmail.com");
java.util.List<TableRow> metadata = new ArrayList<TableRow>();
metadata.add(ip);
metadata.add(ip1);
row.set("array_data",metadata);
LOG.info("O/P:"+row);
c.output(row);
}}));
output.apply("Write to table",BigQueryIO.writeTableRows().withoutValidation().to("AA.nested_array")
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE));
p.run();
任何人都有任何线索或建议。在此先感谢。
解决方案
要使用数据流处理嵌套数组,请创建一个单独的列表并将其添加到 tablerow 的主数组中。
在这里,我尝试了这种方式,得到了预期的输出。
管道 p = Pipeline.create(options); org.apache.beam.sdk.values.PCollection 输出 = p.apply(org.apache.beam.sdk.transforms.Create.of("temp")) .apply("O/P",ParDo.of(new DoFn<String, TableRow>() {
@ProcessElement
public void processElemet(ProcessContext c) {
TableRow row = new TableRow();
row.set("name","Jack");
row.set("phone","9874563210");
List<TableRow> listDest = new ArrayList<>();
TableRow t=new TableRow().set("detail1","one" ).set("detail2", "two");
TableRow t1=new TableRow().set("detail1","three" ).set("detail2", "four");
listDest.add(t);
listDest.add(t1);
TableRow ip = new TableRow().set("address", "M G Road").set("email","abc@gmail.com").set("inside_array", listDest);
TableRow ip1 = new TableRow().set("address","F C Road").set("email","xyz@gmail.com").set("inside_array", listDest);
java.util.List<TableRow> metadata = new ArrayList<TableRow>();
metadata.add(ip);
metadata.add(ip1);
row.set("array_data",metadata);
LOG.info("O/P:"+row);
c.output(row);
}}));
还添加带有数据的表格图像。
希望如果有人在同一种桌子上工作会有所帮助。
推荐阅读
- reactjs - 如何在 reactjs 中使用 react-form-stepper
- javascript - 如何通过调用函数从 html 中的 mysql 检索数据?
- html - 如何让不同的图像适合同一个“盒子”?
- azure-databricks - 在特定单元格后停止执行 Databricks 笔记本
- ruby-on-rails - Rails 后端和 Vue 前端在同一个端口上
- sql - 未找到 Kotlin Gradle 驱动程序依赖项
- excel - 在每张纸上应用代码,除了少数
- javascript - 在 React 中销毁 DOM 元素时如何调用方法
- java - jOOQ - DefaultRecordMapper - 列表
- c# - 无法设置列表的值