我无法在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)
但事后该怎么办?这可能不是一个好方法,所以任何想法?
答案 0 :(得分:1)
没有任何原生内容可以读取JSON文件。
但是,您可以编写一个ParDo,它接受一个文件名并解析该文件(从文件中输出您想要的任何内容)。在这个ParDo中,您可以使用任何存在的库来解析JSON文件。
生成filepatterns列表: 在Beam Java中,可以使用FileIO.match()和FileIO.readMatches在Beam中完成此操作以获取PCollection。
对于python,你不得不自己实现这个匹配。你想做一个Create(filepattern),ParDo(扩展文件模式),重新洗牌,ParDo(你的ParDo读取文件)。