【发布时间】:2018-09-07 12:31:33
【问题描述】:
我正在使用 apache beam avroIO 读取大约一百万个文件。 avroIO 读取的记录是否有任何排序保证,或者我可以认为它们被洗牌了吗?阅读完这些文件后,我需要重新整理数据(如果连续多天完成,这可能会非常昂贵且耗时),但这与重新整理文件然后读取它们是否相同?我知道改组文件不是完整的改组,因为我不会改组文件中的记录,但我可以在文件级别接受足够好的改组,所以想了解 avroIO 何时读取数百万个文件,它在内部是否使用任何类型的排序文件创建时间戳,或按词法排序文件名?此外,我可以看到 avroIO.ReadAll 转换在内部对所有文件进行了重新洗牌,因此鉴于文件级别的洗牌可能对我的用例来说已经足够好,我是否需要再次洗牌我的数据?
在 apache Beam 中是否有一种好方法可以确保我可以直接读取 shuffle 的数据,而不必将它们扁平化为数十亿条记录,然后使用 groupby,即使使用 shuffle 服务也很慢而且也很昂贵。
【问题讨论】:
-
您能详细介绍一下您的应用程序用例吗?你想通过打乱数据来完成什么? Apache Beam 中的
PCollections是无序的,因此您不应对数据的排序或随机化做出任何假设。 -
只是改组训练数据来训练我们的模型。数据存储在 gcs 存储桶上的数百万个文件中,所以我想对训练数据进行洗牌以训练一些模型。我可以忍受近似的随机播放,即我看到 ReadALL 基本上在内部调用从所有匹配文件创建的所有分区拆分的随机播放。
标签: google-cloud-platform google-cloud-storage google-cloud-dataflow avro apache-beam