我需要读取一个存储在项目资源中的文件,目录是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))
型
- 重要提示:**单元测试在本地成功运行,问题发生在远程测试环境。
1条答案
按热度按时间muk1a3rh1#
问题是使用
getResource
和textFile
,我不得不使用getResourceAsStream
和sc.parallelize
的组合,如下所示:字符串
并解析为数据集对象的Spark RDD
型