提问者:小点点

使用Apache Beam和ParquetIO读取多个镶木地板文件


我需要在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.分隔符“*”,但结果相同。我得到的信息是:

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

此外,我可以有拼花文件的各种编号和名称。

是否可以使用Apache Beam读取多个镶木地板文件,因为我找到了读取多个txt文件的方法?


共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 + "**");

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