scala - Spark - 从具有嵌套文件夹的目录中获取特定数据类型的所有文件名

标签 scala apache-spark

我有一个目录,其中包含一些子文件夹,其中包含不同的 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/

相关文章:

apache-spark - PySpark Palantir Foundry 中增量追加更新的行(基于某些列)

scala - 在 Scala 中,有没有办法指定返回类型应该与方法调用者的类型匹配?

scala - 如何获取 scala 对象类型的 classOf

csv - 使用 Spark 内置函数或方法在 Pyspark 中解析 csv 文件

amazon-web-services - Spark + S3 + IAM 角色

hadoop - Apache Spark : In SparkSql, 是易受 SQL 注入(inject)攻击的 sql

apache-spark - Spark : How to overwrite a file on S3 folder and not complete folder

scala - 使用函数从集合创建 map

postgresql - 如何用Doobie正确处理Hikari连接池

scala - scala 隐式宏应该返回什么来告诉编译器 "forget my result, continue your search"