apache-beam - Java ParquetIO 可以写空的 parquet 文件吗?如何?
问题描述
我有一个使用 Apache Beam 2.20 的 Java 应用程序。我读取输入文件并进行过滤和转换,然后将结果以 parquet 格式写入 S3。
它运行得很好。但是现在遇到一个问题是,当我得到一些特定的输入文件时,经过过滤,结果集PCollection可能是空的。所以如果我把这个空的PCollection写入S3,ParquetIO可以完成,但是目标路径中没有文件。
我尝试使用 TextIO 编写空 PCollection。它可以成功写入并且文件为0字节。
那么任何解决方案都可以帮助在梁中保存一个空的镶木地板文件吗?
据我所知,在火花中它可以实现这一点。
解决方案
Beam 模型的工作方式是,如果转换的输入 PCollection 为空,则永远不应该执行该转换。听到 TextIO 以这种方式工作,我有点惊讶,但这可能是其设置的一个方便的副作用,因为现实世界的实现通常与预期的模型有所不同。
但是对于 ParquetIO,很可能不创建文件是空 PCollections 的预期行为。您需要找到一些解决方法来检测过滤何时会导致空 PCollection,然后触发自定义转换以其他方式创建空文件。不幸的是,我没有足够的知识来提供有关该方法的更多详细信息。
推荐阅读
- java - 重复号码检查并不总是有效
- c - c中同一结构的多个名称
- r - 如何使用 par 和 pdf 绘制许多条形图并且不让它们在 R 中被截断
- javascript - 如何将我的服务器端 PHP 代码添加到此表单向导?
- jquery - 用于 iframe 的 jquery iframe onload
- c++ - Qt 虚拟键盘的 InputPanel 在 Raspberry Pi 0 上为空白
- lucene - Lucene 字符串和数字范围查询
- php - 确保密码至少包含 3 个数组中的一个字符
- python - xlwings 中的格式表
- android - 20+天后由于碎片导致内存不足错误android