Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过python读取apache beam(数据流)中的JSON文件?_Python_Google Cloud Platform_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

如何通过python读取apache beam(数据流)中的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

我试图在python中通过ApacheBeam读取JSON文件,并对其应用一些数据质量规则。 目前,我使用beam.io.ReadFromText读取每一行json,并使用一些函数修改数据。 读取JSON数据并修改它们的更好方法是什么

(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+以上)数据集执行重复数据消除。它只取决于数据是什么,以及如何生成和使用数据。