Scala 在spark中循环加载文件
我在一个目录中有Scala 在spark中循环加载文件,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我在一个目录中有n个文件,这些文件具有相同的.txt扩展名,我想将它们加载到一个循环中,然后为每个文件创建单独的数据帧 我已经读过了,但在我的例子中,我所有的文件都有相同的扩展名,我想一个接一个地迭代它们,并为每个文件生成dataframe 我开始计算目录中的文件,代码如下 sc.wholeTextFiles("/path/to/dir/*.txt").count() 但我不知道我该怎么做? 请引导我 我正在使用spark2.3和Scala 谢谢。您可以使用hadoop fs获取目录下的文件列
n
个文件,这些文件具有相同的.txt
扩展名,我想将它们加载到一个循环中,然后为每个文件创建单独的数据帧
我已经读过了,但在我的例子中,我所有的文件都有相同的扩展名,我想一个接一个地迭代它们,并为每个文件生成dataframe
我开始计算目录中的文件,代码如下
sc.wholeTextFiles("/path/to/dir/*.txt").count()
但我不知道我该怎么做?
请引导我
我正在使用spark2.3
和Scala
谢谢。您可以使用hadoop fs获取目录下的文件列表,然后对其进行迭代并将其保存到不同的数据帧
如下所示:
// 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)
}
wholetextiles返回一个成对的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 )
为什么每个文件都需要一个数据帧?这在Spark中没有什么意义。如果您只有一个数据框,其中每行都跟踪文档的来源,这不是更好吗?