我有一个目录,其中包含一些子文件夹,其中包含不同的 Parquet 文件。像这样的事情:
2017-09-05
10-00
part00000.parquet
part00001.parquet
11-00
part00000.parquet
part00001.parquet
12-00
part00000.parquet
part00001.parquet
我想要的是通过传递目录 05-09 的路径来获取所有 parquet 文件的名称列表。
我能够实现它,但效率非常低:
val allParquetFiles = sc.wholeTextFiles("C:/MyDocs/2017-09-05/*/*.parquet")
allParquetFiles.keys.foreach((k) => println("The path to the file is: "+k))
所以每个键都是我正在寻找的名称,但是这个过程还要求我加载所有文件,然后我就无法使用它们,因为我以二进制形式获取它们(而且我不知道如何转换它们进入数据框)。
一旦我有了 key (即文件路径列表),我计划调用:
val myParquetDF = sqlContext.read.parquet(filePath);
正如您可能已经了解的那样,我对 Spark 还很陌生。因此,如果有更快或更简单的方法来读取位于不同文件夹中的 Parquet 文件列表,请告诉我。
我的部分解决方案:我无法获取文件夹中所有文件名的所有路径,但我能够将该类型的所有文件的内容获取到同一数据帧中。这是我的最终目标。如果将来有人需要它,我使用了以下行:
val df = sqlContext.read.parquet("C:/MyDocs/2017-05-09/*/*.parquet")
感谢您的宝贵时间
最佳答案
你可以像这样使用 hdfs api 来做到这一点
import org.apache.hadoop.fs._
import org.apache.hadoop.conf._
val fs = FileSystem.get(new Configuration())
val files = ( fs.listStatus(new Path("C:/MyDocs/2017-09-05/*/*.parquet")) ).map(_.getPath.toString)
关于scala - Spark - 从具有嵌套文件夹的目录中获取特定数据类型的所有文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46052926/