我正在编写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]
,请您指导我参考样本吗?
答案 0 :(得分:1)
这是阅读JSON的示例代码。这是正确的做法吗?
快速回答你的问题,是的。您的示例代码是读取包含JSON的文件的正确方法,其中文件的每一行都包含一个JSON元素。 TextIO
输入转换逐行读取文件,因此如果单个JSON元素跨越多行,则它将不可解析。
第二个代码示例具有相同的效果。
上面的代码没有读取json文件,它打印就像
预计打印结果。变量lines
实际上不包含文件中的JSON字符串。 lines
是PCollection
的{{1}};它只是表示应用转换后管道的状态。可以通过应用后续变换来访问管道中的元素。实际的JSON字符串可以在变换的实现中访问。