Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在spark中循环加载文件_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

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中没有什么意义。如果您只有一个数据框,其中每行都跟踪文档的来源,这不是更好吗?