Как получить путь к файлу ресурса в банке - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь загрузить файл, который находится в src / main / resources. Он отлично работает в моем локальном, но когда я развертываю банку, вижу проблему. Я знаю, как получить входной поток, но в моем случае мне нужно загрузить файл.

Расположение файла:

src
   main
      resources
            cert
               truststore.ks

Строка filename = cert / truststore.ks

spark.sparkContext().addFile(getAbsolutePath(filename)); 

Метод:

public String getAbsolutePath(String fileName) throws IOException, URISyntaxException {
    return getClass().getClassLoader().getResource(fileName).toExternalForm();
  }

Ошибка:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:65)
    at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala)
Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: jar:file:/work/run/driver-20200525203940-0037/service-1.0.0-SNAPSHOT.jar!/cert/truststore.ks
    at org.apache.hadoop.fs.Path.initialize(Path.java:205)
    at org.apache.hadoop.fs.Path.<init>(Path.java:171)
    at org.apache.spark.SparkContext.addFile(SparkContext.scala:1519)
    at org.apache.spark.SparkContext.addFile(SparkContext.scala:1499)
Caused by: java.net.URISyntaxException: Relative path in absolute URI: jar:file:/work/run/driver-20200525203940-0037/service-1.0.0-SNAPSHOT.jar!/cert/truststore.ks
    at java.net.URI.checkPath(URI.java:1823)
    at java.net.URI.<init>(URI.java:745)
    at org.apache.hadoop.fs.Path.initialize(Path.java:202)

1 Ответ

0 голосов
/ 26 мая 2020

Попробуйте использовать -

SparkFiles.get(fileName)

Вот источник- git

Например, следуйте этому gist

...