首页 > 解决方案 > Java ParquetIO 可以写空的 parquet 文件吗?如何?

问题描述

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

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

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

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

据我所知,在火花中它可以实现这一点。

标签: apache-beamparquet

解决方案


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

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


推荐阅读