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

Multithreading in Apache Beam : Reading Files in Seperate Threads

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

  1. 线程 1 可以读取文件 1 并创建 PCollection<String>。我可以在多线程环境中执行 Pardo Operation 吗?并从 PCollection< String >?
  2. 创建一个 PCollection < String,String >
  3. 线程 2 并完成与线程 1 相同的操作,但在不同的文件文件 2 上。
  4. 线程1和线程2操作完成后,在主线程中加入File1和File 2的输出。

请问这是否可行,是否是推荐的方法?

听起来你想要的东西都可以用 Beam 来完成。在 Beam 模型中,您没有定义 how 您希望您的操作 运行,而是定义您想要执行的 what 操作;然后是 Beam,底层 运行ner 负责管理线程。

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

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

  1. 您的文件已压缩。这意味着文件需要同时解压和读取,并且可以同时从不同的偏移量读取。
  2. 您的文件太多(1000 个)。如果您有数千或数万个文件,您可能希望使用 TextIO.readAll 而不是正常的 TextIO 实现,因为跟踪并行读取的数千个文件会使系统不堪重负。

如果您使用的是非纯文本文件或其他类型的源,请告诉我。