使用Apache Beam和ParquetIO读取多个Parquet文件

时间:2019-08-29 14:14:51

标签: apache-beam parquet

我需要在Apache Beam中读取多个实木复合地板文件,所有文件都放在同一文件夹中。 我尝试使用通配符*读取它。

我已经成功地使用ParquetIO读取了分离的实木复合地板文件,这是我读取一个实木复合地板文件的摘录:

pipeline.apply(ParquetIO.read(SCHEMA).from(filePath + File.separator + "*"));

其中filePath是/path/xxx.parquet。

我试图读取多个实木复合地板文件的代码片段是

pipeline.apply(ParquetIO.read(SCHEMA).from(folderPath + File.separator + "*.parquet" + File.separator + "*"));

例如,文件夹路径为/ path / to / parquet / files /

我也尝试了没有最后一部分File.separator +“ *”,但是结果是一样的。 我得到的信息是:

  

FileIO:654-匹配模式的0个文件   /path/to/parquet/files/*.parquet/ *

此外,我可以有各种数量和名称的镶木地板文件。

因为我找到了读取多个txt文件的方法,所以可以使用Apache Beam读取多个实木复合地板文件吗?

1 个答案:

答案 0 :(得分:1)

是的,可以使用ParquetIO读取多个实木复合地板文件,因为它在后台使用了FileIO。只需尝试使用其他匹配模式即可。在您的情况下,可能是这样的(我希望folderPath是“ / path / to”):

pipeline.apply(ParquetIO.read(SCHEMA).from(folderPath + File.separator + "parquet" + File.separator + "*" + File.separator + "*"));

或最后只加双星:

pipeline.apply(ParquetIO.read(SCHEMA).from(folderPath + File.separator + "parquet" + File.separator + "**");

您不能将.用作glob模式的一部分,因为它可能是文件路径的合法部分。使用?来匹配单个目录中的任何单个字符,或者使用*来匹配单个目录中的任何字符串。另外,“ **”模式匹配任何字符串,并跨越目录边界。