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

用Python中的Apache Beam读取多行json文件(非JSONL),python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,我无法在Apache Beam管道(用Python编码)中读取输入多行JSON输入文件 我了解带有JSON编码器的ReadFromFile读取JSONL文件,但如何处理以下格式的文件: [{ "name": "name1", "value": "val1" }, { "name": "name2", "value": "val2" }] 我在文件系统模块中进行cam,该模块包含open()函数,允许读取整个文件(不是逐行读取),但这会返回一个文件句柄(根据 但事后怎么办呢?这可

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

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

[{
  "name": "name1",
  "value": "val1"
},
{
  "name": "name2",
  "value": "val2"
}]
我在
文件系统
模块中进行cam,该模块包含
open()
函数,允许读取整个文件(不是逐行读取),但这会返回一个文件句柄(根据


但事后怎么办呢?这可能不是一个好方法,所以有什么想法吗?

没有任何本机的东西可以读取JSON文件

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

要生成文件模式列表,请执行以下操作: 在Beam Java中,可以在Beam中使用FileIO.match()和FileIO.readMatches来获取PCollection


不幸的是,对于python,您必须自己实现匹配。您需要执行创建(文件模式)、ParDo(扩展文件模式)、重新洗牌、ParDo(读取文件的ParDo)。

谢谢Lara。最后我做了一些非常简单的
beam.Create(json.loads(FileSystems.open(known_args.input).read())
。但是根据你的回答,它看起来太简单了。。。我做错什么了吗?你只是在读一个文件吗?这似乎是在客户身上读到的,而不是在员工身上读到的。是这样吗?我的建议是基于您是否有很多需要阅读的文件模式。如果只有一个,那么应该更简单。是的,只有一个文件。我确实使用DirectRunner和GCP作为自定义模板。