我看到 apache beam 可以轻松缩放 # 个 csv 文件,但是一个 csv 中的 # 行呢?

I see apache beam scales with # of csv files easiy but what about # lines in one csv?

我目前正在阅读这篇文章和 apache beam 文档 https://medium.com/@mohamed.t.esmat/apache-beam-bites-10b8ded90d4c

我读过的所有东西都是关于N个文件的。在我们的用例中,我们每次都会收到一个新文件的 pubsub 事件来启动一项工作。我不需要按文件缩放,因为我可以为此使用 cloudrun。我需要根据文件中的行数进行缩放。 IE。一个 100 行的文件和一个 100,000,000 行的文件,我希望看到大约在同一时间处理。

如果我按照上面的文章并给它一个文件而不是多个文件,在幕后,apache beam 将如何缩放。它如何知道对 100 行文件使用 1 个节点还是对 1,000,000 行文件使用 1000 个节点。毕竟,它不知道文件中有多少行开始。

数据流是否不随文件中的行数缩放?我在想也许节点 1 会读取第 0-99 行,节点 2 会 read/discard 0-99 然后读取 100-199。

有谁知道引擎盖下发生了什么,这样我就不会浪费数小时的测试时间来弄清楚它是否根据文件中的行数进行缩放?

编辑:相关问题但不是同一个问题 - How to read large CSV with Beam?

我认为数据流可能会因为一个节点读取整个文件而成为瓶颈,我可以在一台普通计算机上做到这一点,但我真的很想知道它是否可以比这更好。

另一种说法是在幕后,这一行实际上在做什么

PCollection<String> leftInput = TextIO.read().from(“left.csv”)

可能是一个节点读取然后发送到一堆其他节点,但是当csv是bigdata size时,如果只有1个reader csv就会有明显的瓶颈。

关于我的想法的更多背景。我确实看到了一个“HadoopFileSystem”连接器(尽管我们与 GCP 存储交谈)。我的猜测是 HadoopFileSystem 一个基于 HDFS 具有代表文件的 'partition files' 的事实,因此它已经是 N 个文件。我们使用 google 云存储,所以它只是一个 csv 文件而不是 N 个文件。虽然 HDFS 连接器可以启动与分区相同数量的节点,但 TextIO 只能看到一个 csv 文件,仅此而已。

谢天谢地,我的同事发现了这个只读了一行的文章

http://moi.vonos.net/cloud/beam-read-header/

但是它确实显示了我认为如何确保分区的代码和不同的作品读取文件的不同部分。我想这会解决它!!!

如果有人有一个很好的 csv 分区示例,那就太棒了,但我们可以尝试创建自己的。目前,有人阅读了整个文件。