【问题标题】:Can Java ParquetIO write empty parquet files ? And how?Java ParquetIO 可以写空的 parquet 文件吗?如何?
【发布时间】:2021-01-13 07:14:12
【问题描述】:

我有一个使用 Apache Beam 2.20 的 Java 应用程序。我读取输入文件并进行过滤和转换,然后将结果以 parquet 格式写入 S3。

它运行得很好。但是现在遇到一个问题是,当我得到一些特定的输入文件时,经过过滤,结果集 PCollection 可能是空的。所以如果我把这个空的PCollection写入S3,ParquetIO可以完成,但是目标路径中没有文件。

我尝试使用 TextIO 编写空 PCollection。可以写入成功,文件为0字节。

那么任何解决方案都可以帮助在梁中保存一个空的镶木地板文件吗?

据我所知,在 spark 中它可以做到这一点。

【问题讨论】:

    标签: apache-beam parquet


    【解决方案1】:

    Beam 模型的工作方式是,如果转换的输入 PCollection 为空,则永远不应执行该转换。听到 TextIO 以这种方式工作,我有点惊讶,但这可能是其设置的一个方便的副作用,因为现实世界的实现通常与预期的模型有些不同。

    但对于 ParquetIO,可能不创建文件是空 PCollections 的预期行为。您需要找到一些解决方法来检测过滤何时会导致空 PCollection,然后触发自定义转换以其他方式创建空文件。不幸的是,我知道的不够多,无法提供有关该方法的更多详细信息。

    【讨论】:

    • 感谢丹尼尔的解释。我可以在我的代码中确认 TextIO 是这样做的,因为我的应用程序现在编写了 2 种格式,csv 和 parquet。根据您的解释,我对梁模型了解更多。但这会导致业务用例出现不可预测的结果。它不保证文件可以放在那里。所以接下来依赖这条路径的作业需要处理更多的场景。
    猜你喜欢
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多