Apache Beam中的多线程:在单独的线程中读取文件

时间:2017-11-21 22:55:57

标签: apache-beam

我们需要创建单独的线程来读取多个文件。

1)线程1可以读取文件1并创建PCollection。我可以在多线程环境中执行Pardo操作。并创建一个PCollection<字符串,字符串>来自PCollection<字符串>。 2)线程2并从线程1完成相同的操作,但是在不同的文件文件2上。 3)在线程1和线程2操作完成后,在主线程中加入File1和File 2的输出。

请告诉我是否可行,这是推荐的方法。

由于

1 个答案:

答案 0 :(得分:1)

这听起来像你想要的可以完成梁。在Beam模型中,您没有定义 您希望运行的操作,而是您想要执行的操作;然后是Beam,底层的跑步者负责管理线程。

这就是为什么你通常不应该管理自己的线程来读取Beam中的文件。您应该使用TextIO来读取纯文本文件,TextIO模块应该并行读取文件。

在某些情况下,您的文件无法并行读取:

  1. 您的文件已压缩。这意味着文件需要同时解压缩和读取,并且可以同时从不同的偏移量中读取。
  2. 您有太多文件(1000s)。如果您有数千或数万个文件,则可能需要使用TextIO.readAll而不是正常的TextIO实现,因为跟踪并行读取的数千个文件可能会使系统崩溃。
  3. 如果您使用的是非纯文本文件或其他类型的来源,请告诉我。