【问题标题】:apache beam avroIO read apiapache 梁 avroIO 读取 api
【发布时间】: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


【解决方案1】:

AvroIO 不对数据的洗牌做出任何保证。 Apache Beam SDK 是开源的,所以正如您所提到的,可以使用read through the implementation。它看起来像file ranges get randomized,但这是转换实现的实现细节。如果您的应用程序需要混洗数据,我建议添加明确的Reshuffle,而不是依赖内部详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多