为了账号安全,请及时绑定邮箱和手机立即绑定

在 Apache Beam 中读取整个文件

在 Apache Beam 中读取整个文件

繁花不似锦 2022-06-28 15:25:32
是否可以在 Apache Beam 中读取整个文件(不是逐行)?例如,我想读取多行 JSON,我的想法是逐个文件读取,从每个文件中提取数据并从列表中创建 PCollection。将源 JSON 预处理为一个 JSON 文件,其中每一行都是单独的 JSON,这是个好主意还是更好?谢谢你的提前。
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

TextIO逐行读取文件。因此,在您的 test.json 中,每一行都需要包含一个单独的 Json 对象。

光束或任何分布式处理引擎的想法是能够并行化输入数据。从您的问题来看,似乎需要进行一些预处理才能将它们拆分为多个 json。请注意,它不必位于单个文件中,您可以拥有多个文件,每个文件都包含任意数量的 json 文件。Beam 将并行读取行。

如果有帮助,请接受答案。


查看完整回答
反对 回复 2022-06-28
?
ITMISS

TA贡献1871条经验 获得超8个赞

希望对从文件读取的对象进行并行化是一个合理的用例。


import apache_beam as beam

from apache_beam.io import fileio

import json


# Make some fake data

for i in range(0,10):

    with open(f'/tmp/data{i}.json', 'w') as f:

        json.dump({'somethinig':i,'otherthing':[1,2,3]}, f)


filenames = [f'/tmp/data{i}.json' for i in range(0,10)]

with beam.Pipeline() as pipeline:

  lines = (

      pipeline

      | beam.Create(filenames)

      | fileio.MatchAll()

      | fileio.ReadMatches()

      | beam.Map(lambda file: print(file.read_utf8()))

      )


查看完整回答
反对 回复 2022-06-28
  • 2 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信