在Spark中循环加载文件

时间:2018-08-06 17:29:48

标签: scala apache-spark apache-spark-sql

我在一个具有n扩展名的目录中有.txt个文件,我想循环加载它们,然后为每个文件分别创建dataframes

我已经读过this,但对于我来说,我所有的文件都具有相同的扩展名,我想一个一个地遍历它们,并为每个文件制作dataframe

我首先用下面的代码行计数目录中的文件

sc.wholeTextFiles("/path/to/dir/*.txt").count()

但是我不知道该怎么做? 请指导我。

我正在使用Spark 2.3Scala

谢谢。

2 个答案:

答案 0 :(得分:1)

整个纺织品返回一个成对的Rdd函数

def wholeTextFiles(path: String, minPartitions: Int): rdd.RDD[(String, String)]

您可以在rdd上进行映射,rdd的键是文件的路径,值是文件的内容

sc.wholeTextFiles("/path/to/dir/*.txt").take(2)

sc.wholeTextFiles("/path/to/dir/*.txt").map((x,y)=> some logic on x and y )

答案 1 :(得分:0)

您可以使用hadoop fs并获取目录下的文件列表,然后对其进行迭代并保存到其他net数据帧中。

类似以下内容:

// Hadoop FS
val hadoop_fs = FileSystem.get(sc1.hadoopConfiguration)

// Get list of part files
val fs_status = hadoop_fs.listLocatedStatus(new Path(fileFullPath))
while (fs_status.hasNext) {

      val fileStatus = fs_status.next.getPath
      val filepath = fileStatus.toString
      val df = sc1.textFile(filepath)
}