【问题标题】:java.net.URISyntaxException: Relative path in absolute URIjava.net.URISyntaxException:绝对 URI 中的相对路径
【发布时间】: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


【解决方案1】:

问题是使用getResourcetextFile,我必须使用getResourceAsStreamsc.parallelize 的组合,如下所示:

def lines: List[String] = {
    Option(getClass.getResourceAsStream("/dataset/dataset.dat")) match {
      case None => sys.error("Please download the dataset as explained in the assignment instructions")
      case Some(resource) => Source.fromInputStream(resource).getLines().toList
    }
  }

并解析为数据集对象的 Spark RDD

val dsRdd: RDD[DatasetObject] = sc.parallelize(lines).map(line => DatasetData.parse(line))

【讨论】:

  • 根据文件的大小,最好使用spark-submit ... --files而不是作为JAR的一部分发送
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多