Apache Beam - 读取JSON和Stream

时间:2018-05-24 19:15:49

标签: java apache-beam

我正在编写Apache beam代码,我必须读取放置在项目文件夹中的JSON文件,然后读取数据并将其传输。

这是阅读JSON的示例代码。这是正确的做法吗?

PipelineOptions options = PipelineOptionsFactory.create();
options.setRunner(SparkRunner.class);

Pipeline p = Pipeline.create(options);

PCollection<String> lines = p.apply("ReadMyFile", TextIO.read().from("/Users/xyz/eclipse-workspace/beam-prototype/test.json"));
System.out.println("lines: " + lines);

或者我应该使用,

p.apply(FileIO.match().filepattern("/Users/xyz/eclipse-workspace/beam-prototype/test.json"))

我只需要阅读下面的json文件。阅读此文件中的完整testdata,然后流式传输。

{
“testdata":{
“siteOwner”:”xxx”,
“siteInfo”:{
“siteID”:”id_member",
"siteplatform”:”web”,
"siteType”:”soap”,
"siteURL”:”www”,
}
}
}

上面的代码没有读取json文件,它打印就像

lines: ReadMyFile/Read.out [PCollection]

,请您指导我参考样本吗?

1 个答案:

答案 0 :(得分:1)

  

这是阅读JSON的示例代码。这是正确的做法吗?

快速回答你的问题,是的。您的示例代码是读取包含JSON的文件的正确方法,其中文件的每一行都包含一个JSON元素。 TextIO输入转换逐行读取文件,因此如果单个JSON元素跨越多行,则它将不可解析。

第二个代码示例具有相同的效果。

  

上面的代码没有读取json文件,它打印就像

预计打印结果。变量lines实际上不包含文件中的JSON字符串。 linesPCollection的{​​{1}};它只是表示应用转换后管道的状态。可以通过应用后续变换来访问管道中的元素。实际的JSON字符串可以在变换的实现中访问。