Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark从resources文件夹在jar中加载csv文件_Scala_Apache Spark - Fatal编程技术网

Scala Spark从resources文件夹在jar中加载csv文件

Scala Spark从resources文件夹在jar中加载csv文件,scala,apache-spark,Scala,Apache Spark,我正在尝试创建一个在Scala上运行的Spark应用程序,该应用程序读取位于src/main/resources目录中的.csv文件,并将其保存在本地hdfs实例上。当我在本地运行它时,一切都很好,但每当我将它打包成.jar文件并部署到服务器上时,总会出现一些问题 这是位于src/main/scala中的我的代码,我的数据文件的位置是src/main/resources/dataset.csv: val df = spark.read .format("csv") .option("he

我正在尝试创建一个在Scala上运行的Spark应用程序,该应用程序读取位于
src/main/resources
目录中的
.csv
文件,并将其保存在本地
hdfs
实例上。当我在本地运行它时,一切都很好,但每当我将它打包成.jar文件并部署到服务器上时,总会出现一些问题

这是位于
src/main/scala
中的我的代码,我的数据文件的位置是
src/main/resources/dataset.csv

val df = spark.read
  .format("csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .load(getClass.getResource("dataset.csv").toString())
但是,当我通过调用
sbt-package
创建jar并将其部署到我的服务器时,我收到以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: 
java.net.URISyntaxException: 
Relative path in absolute URI: jar:file:/root/./myapp_2.11-0.1.jar!/dataset.csv

如何才能正确链接到我的文件?

从错误消息中,spark似乎需要一个绝对路径,而您提供的是文件的相对路径。我始终提供文件的绝对路径(hdfs://如果文件在hdfs中,或file://如果文件是本地的)。下面是示例代码

import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder.appName("My spark app").config("master","yarn").getOrCreate()
import spark.implicits._
val df = spark.read.json("hdfs:///user/amalprakash32203955/data/people.json")
对从
getResource
返回的
URL
对象使用
getPath()
获取绝对路径:

getClass.getResource(“data.csv”).getPath()
像这样:

/upload data scala project/target/scala-2.11/classes/data.csv

使用
toString
将为您提供URL的字符串表示,如:

文件:/upload data scala project/target/scala-2.11/classes/data.csv


它没有前导斜杠,因此被解释为一个相对路径。

您可以将csv文件存储在HDFS中,然后从Spark作业中读取,然后将其写回吗?这似乎是一个更好的设计,将数据从处理数据的应用程序中分离出来。在Thread中执行时,我收到的“21/02/24 10:53:27错误Thread.Client:应用程序诊断消息:用户类引发异常:java.lang.NullPointerException”可能重复。