Java 在dataflow 2.x中,将TableRow转换为JSON格式字符串的最简单方法是什么?

Java 在dataflow 2.x中,将TableRow转换为JSON格式字符串的最简单方法是什么?,java,json,apache-beam,dataflow,Java,Json,Apache Beam,Dataflow,除了编写自己的函数之外,将dataflow 2.x管道中的TableRow对象转换为JSON格式字符串的最简单方法是什么 我认为下面的代码可以工作,但它不能正确地在键/值之间插入引号,特别是在有嵌套字段的地方 public static class TableRowToString extends DoFn<TableRow, String> { private static final long serialVersionUID = 1L; @ProcessEle

除了编写自己的函数之外,将dataflow 2.x管道中的
TableRow
对象转换为JSON格式字符串的最简单方法是什么

我认为下面的代码可以工作,但它不能正确地在键/值之间插入引号,特别是在有嵌套字段的地方

public static class TableRowToString extends DoFn<TableRow, String> {    
  private static final long serialVersionUID = 1L;

  @ProcessElement
    public void processElement(ProcessContext c) {
      c.output(c.element().toString());
    }
  }
}
public静态类tablerrowtostring扩展了DoFn{
私有静态最终长serialVersionUID=1L;
@过程元素
公共void processElement(ProcessContext c){
c、 输出(c.element().toString());
}
}
}

使用
GSON
并执行
GSON.toJson(yourTableRow)
详细信息我遇到了同样的问题,我使用解决了

要使用它,无需创建新变换,您可以直接在管道上应用它

import org.apache.beam.sdk.extensions.jackson.AsJsons;

Pipeline p = Pipeline.create(options);

p.apply("The transform that returns a PCollection of TableRow")
.apply("JSon Transform", AsJsons.of(TableRow.class));

如果您使用maven管理您的项目,您可以将其添加到
pom.xml
文件中的

<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-extensions-json-jackson</artifactId>
  <version>2.5.0</version>
  <scope>compile</scope>
</dependency>

org.apache.beam
beam SDK java扩展json jackson
2.5.0
编译

这很有趣。我想知道AsJsons的效率是多少?但相比之下,我们发现Gson使用起来非常昂贵;此时,我们尝试在单元测试中专门使用它来将JSON字符串转换为对象以用作输入。我运行的示例有100个TableRows和大约20个列,因此我现在不能对效率说太多。关于效率的更新:我对142515724个TableRows运行JSON转换,耗时14分钟22秒数据流
AsJsons
转换的返回值是多少?它是否像
PCollection
?@bigbounty查看文档,
AsJsons.of
返回一个
PCollection
创建一个AsJsons pttransform,该转换将使用Jackson ObjectMapper将PCollection转换为表示这些对象的JSON字符串的PCollection。