【问题标题】:handling multiple formats of data file (JSON, XML, CSV)处理多种格式的数据文件(JSON、XML、CSV)
【发布时间】:2019-01-31 19:47:22
【问题描述】:

如果数据以各种文件格式出现在一个对象存储桶中。这应该用一个管道处理吗?最佳做法是什么?

【问题讨论】:

    标签: pipeline apache-beam


    【解决方案1】:

    这取决于您的要求是否包括来自不同格式的连接/合并数据。

    假设您有多个来源,并且每个来源都读取文件格式的数据。然后你想做一个扁平化来合并你的 PCollection 和聚合,你必须有一个管道。

    也可以勾选[1]、[2]、[3]。

    有 [4] 显示了 BeamSQL 如何从文本文件转换为行。

    [1]https://beam.apache.org/documentation/pipelines/design-your-pipeline/#multiple-sources [2]https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/Schema.java [3]https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/values/Row.java [4]https://github.com/apache/beam/blob/master/sdks/java/extensions/sql/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/text/TextTable.java#L68

    【讨论】:

    • 非常感谢瑞。所以源是一样的,一个单独的桶,管道会将特定格式视为特定源,然后展平以合并 PCollections。我是否应该包括一个将所有格式(CSV、XML)转换为 JSON 并让 beam 只处理一种格式的中间步骤?最佳做法是什么?
    • 我明白了。我熟悉 Beam 中的模式和行。所以我想我可以在一个管道中有多个源,每个源将桶中的一种文件格式处理到 Beam 中的 Row,然后对 Row 的 PCollection 进行进一步处理。
    • 在 BeamSQL 中,它允许您创建多个文本表,每个表都有其格式(cvs 等)。 BeamSQL 将每个文本表编译为一个源,读取表单源并将任何格式转换为 Row,然后进行正常的 SQL 处理。
    • 添加到 Rui 的 cmets 中,我不相信有一个基于您所描述的最佳实践。这取决于你想用这些数据做什么。例如。如果您需要将元素组合在一起,那么如果从一开始就将它们保持在相同的PCollection 中,可能会更容易。在这种情况下,我可能会有一个ParDo 将所有元素解析为一种通用格式。但是,如果您只是一个接一个地转换元素,那么从 Beam 的角度来看,这并不重要,但是如果在这种情况下(或没有)有多个源,则可能更容易获得更好的并行性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2017-04-09
    • 2011-04-04
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多