在 spark/scala 中循环和处理多个 HDFS 文件

时间:2021-02-27 12:54:42

标签: scala apache-spark spark-streaming

我的 HDFS 文件夹中有多个文件,我想在其上循环并运行我的 Scala 转换逻辑。

我正在使用以下脚本,该脚本在使用本地文件的开发环境中运行良好,但在我的 HDFS 环境中运行时失败。知道我哪里做错了吗?

val files = new File("hdfs://172.X.X.X:8020/landing/").listFiles.map(_.getName).toList

files.foreach { file =>
print(file) 
val event = spark.read.option("multiline", "true").json("hdfs://172.X.X.X:8020/landing/" + file)
event.show(false)
}

有人可以纠正它或提出替代解决方案吗。

1 个答案:

答案 0 :(得分:0)

您应该使用 Hadoop IO 库来处理 hadoop 文件。

代码:

import java.net.URI
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.spark.sql.SparkSession

val spark=SparkSession.builder().master("local[*]").getOrCreate()

val fs=FileSystem.get(new URI("hdfs://172.X.X.X:8020/"),spark.sparkContext.hadoopConfiguration)

fs.globStatus(new Path("/landing/*")).toList.foreach{
   f=>
   val event = spark.read.option("multiline", "true").json("hdfs://172.X.X.X:8020/landing/" + f.getPath.getName)
   event.show(false)
}
相关问题