scala - 在 spark/scala 中循环和处理多个 HDFS 文件
问题描述
我的 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)
}
有人可以纠正它或建议替代解决方案。
解决方案
您应该使用 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)
}
推荐阅读
- .net-core - 错误日志包含候选版本中的源代码路径
- c++ - C++ 中的 Double 和 Trible 星号
- javascript - Django文件字段:音频文件不转发和倒带
- python - 如何将“文本框”中的文本添加到图像中?
- python - 硒找不到元素
- reactjs - 无法从 React 应用程序获取 Firestore 数据
- angular - 将 PrimeNg 语言环境与 ngx-translate 一起使用
- java - 邮递员 Newman Jenkins Java 集成
- html-table - 数据表 html5 导出不打印所有列
- c++ - 程序结束后不显示添加的数据