【发布时间】:2022-01-17 16:51:04
【问题描述】:
我需要读取存储在我项目资源中的文件,目录是src/main/resources/dataset/dataset.dat。
我正在使用以下 Scala 代码行从 HDFS 读取文本文件并解析为数据集对象的 Spark RDD:
// init Spark context
val conf: SparkConf = new SparkConf().setAppName("mydataset").setMaster("local")
val sc: SparkContext = new SparkContext(conf)
// read dat file
val resource = this.getClass.getClassLoader.getResource("dataset/dataset.dat")
val dsRdd: RDD[DatasetObject] = sc.textFile(resource.toString(), 1).map(line => DatasetData.parse(line))
但出现以下错误:
class java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: jar:file:/grader/grader.jar!/dataset/dataset.dat
java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: jar:file:/grader/grader.jar!/dataset/dataset.dat
我尝试用另一种方式读取文件,但错误不断发生,例如
val dsRdd: RDD[DatasetObject] = sc.textFile("src/main/resources/dataset/dataset.dat").map(line => DatasetData.parse(line))
重要提示:单元测试在本地成功运行,问题出现在远程测试环境。
【问题讨论】:
-
您能描述一下您的远程测试环境吗?云?还记得工作人员尝试加载文件,他们可以使用吗?
-
@jgp 抱歉,我没有关于远程环境的详细信息,因为它是用于作业的 Coursera 在线实验室。
-
我认为您的问题仍然在于路径……它是旧课程吗? RDD 是如此 2018 :)
-
src/main在您的 JAR 中或代码编译后不存在。我相信有一个名为SparkFiles的类,你应该在这里使用它。 -
@OneCricketeer 感谢您抽出宝贵时间,我找到了解决方案。我在下面发表评论:)
标签: java scala apache-spark hadoop