如何通过python读取apache beam(数据流)中的JSON文件?
我试图在python中通过ApacheBeam读取JSON文件,并对其应用一些数据质量规则。 目前,我使用beam.io.ReadFromText读取每一行json,并使用一些函数修改数据。 读取JSON数据并修改它们的更好方法是什么如何通过python读取apache beam(数据流)中的JSON文件?,python,google-cloud-platform,google-cloud-dataflow,apache-beam,Python,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,我试图在python中通过ApacheBeam读取JSON文件,并对其应用一些数据质量规则。 目前,我使用beam.io.ReadFromText读取每一行json,并使用一些函数修改数据。 读取JSON数据并修改它们的更好方法是什么 (p | 'Getdata' >> beam.io.ReadFromText(input) | 'filter_name' >> beam.FlatMap(lambda line: dq_name(line)) | 'filte
(p
| 'Getdata' >> beam.io.ReadFromText(input)
| 'filter_name' >> beam.FlatMap(lambda line: dq_name(line))
| 'filter_phone' >> beam.FlatMap(lambda line: dq_phone(line))
| 'filter_zip' >> beam.FlatMap(lambda line: dq_zip(line))
| 'filter_address' >> beam.FlatMap(lambda line: dq_city(line))
| 'filter_website' >> beam.FlatMap(lambda line: dq_website(line))
| 'write' >> beam.io.WriteToText(output_prefix) )
注意:我对这一点相当陌生,如果我目前的方法看起来太低劣或愚蠢,我很抱歉 您正从错误的方向接近Apache Beam(数据流) 您正在尝试读取一行,然后对该行一次应用一个变换 相反,您需要将Beam看作一个并行处理器。您将读入所有行
ReadFromText()
,然后对每行并行应用转换
查看函数beam.ParDo()
。这将允许您创建一个类来处理JSON文件的每一行。然后,您的代码将包含一些主要步骤,如ReadFromText()
,ParDo(MyJsonProcessor())
,WriteToText()
请记住,您的JSON需要是换行分隔的JSON 我觉得你的管道没问题。它将并行运行,没有任何问题。仅供参考,如果您仅将
FlatMap
用于过滤元素,您也可以使用。您到底想问什么?您当前的方法有什么特别的问题吗?我不知道我必须将json转换为ndjson,所以当读取每一行时,我无法理解如何读取整个json文件谢谢!使用ndjson解决了这个问题。对不起,我的无知。还有一件事,如何执行重复数据消除?你能告诉我我应该研究什么吗?谷歌搜索应该会有很多点击率。由于需要空间和时间,因此很难对大型(100 GB+以上)数据集执行重复数据消除。它只取决于数据是什么,以及如何生成和使用数据。