使用Python中的Apache Beam读取多行json文件(非JSONL)

时间:2018-03-14 15:24:54

标签: python google-cloud-dataflow apache-beam

我无法在Apache Beam管道中读取输入多行JSON输入文件(用Python编码)。

我理解带有JSON编码器的ReadFromFile读取JSONL文件但是如何处理以下格式的文件:

In [13]: urllib.parse.urlencode({'PTZInterface!!ptzPositions': 1}, safe='!')
Out[13]: 'PTZInterface!!ptzPositions=1'

我越过[{ "name": "name1", "value": "val1" }, { "name": "name2", "value": "val2" }] 模块,其中包含FileSystem函数允许读取整个文件(不是逐行),但这会返回一个文件句柄(根据documentation

但事后该怎么办?这可能不是一个好方法,所以任何想法?

1 个答案:

答案 0 :(得分:1)

没有任何原生内容可以读取JSON文件。

但是,您可以编写一个ParDo,它接受一个文件名并解析该文件(从文件中输出您想要的任何内容)。在这个ParDo中,您可以使用任何存在的库来解析JSON文件。

生成filepatterns列表: 在Beam Java中,可以使用FileIO.match()和FileIO.readMatches在Beam中完成此操作以获取PCollection。

对于python,你不得不自己实现这个匹配。你想做一个Create(filepattern),ParDo(扩展文件模式),重新洗牌,ParDo(你的ParDo读取文件)。