【问题标题】:Spark REST API: Failed to find data source: com.databricks.spark.csvSpark REST API:找不到数据源:com.databricks.spark.csv
【发布时间】:2016-12-01 06:51:29
【问题描述】:

我有一个 pyspark 文件存储在 s3 上。我正在尝试使用 spark REST API 运行它。

我正在运行以下命令:

curl -X POST http://<ip-address>:6066/v1/submissions/create --header "Content-Type:application/json;charset=UTF-8" --data '{
"action" : "CreateSubmissionRequest",
"appArgs" : [ "testing.py"],
"appResource" : "s3n://accessKey:secretKey/<bucket-name>/testing.py",
"clientSparkVersion" : "1.6.1",
"environmentVariables" : {
    "SPARK_ENV_LOADED" : "1"
},
"mainClass" : "org.apache.spark.deploy.SparkSubmit",
"sparkProperties" : {
"spark.driver.supervise" : "false",
"spark.app.name" : "Simple App",
"spark.eventLog.enabled": "true",
"spark.submit.deployMode" : "cluster",
"spark.master" : "spark://<ip-address>:6066",
"spark.jars" : "spark-csv_2.10-1.4.0.jar",
"spark.jars.packages" : "com.databricks:spark-csv_2.10:1.4.0"
}
}'

而testing.py文件有一个代码sn-p:

myContext = SQLContext(sc)
format = "com.databricks.spark.csv"
dataFrame1 = myContext.read.format(format).option("header", "true").option("inferSchema", "true").option("delimiter",",").load(location1).repartition(1)
dataFrame2 = myContext.read.format(format).option("header", "true").option("inferSchema", "true").option("delimiter",",").load(location2).repartition(1)
outDataFrame = dataFrame1.join(dataFrame2, dataFrame1.values == dataFrame2.valuesId)
outDataFrame.write.format(format).option("header", "true").option("nullValue","").save(outLocation)

但是在这一行:

dataFrame1 = myContext.read.format(format).option("header", "true").option("inferSchema", "true").option("delimiter",",").load(location1).repartition(1)

我得到异常:

java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.csv. Please find packages at http://spark-packages.org
Caused by: java.lang.ClassNotFoundException: com.databricks.spark.csv.DefaultSource

我正在尝试不同的事情,其中​​一件事是我登录到 ip-address 机器并运行以下命令:

./bin/spark-shell --packages com.databricks:spark-csv_2.10:1.4.0

以便它将 spark-csv 下载到 .ivy2/cache 文件夹中。但这并没有解决问题。我做错了什么?

【问题讨论】:

  • 嗨,Shashi,下面的答案有一个问题 - 你能回答吗?谢谢。

标签: rest api apache-spark amazon-s3 spark-csv


【解决方案1】:

(代表 OP 发布).

我首先在驱动程序和工作机器上添加了 spark-csv_2.10-1.4.0.jar。并添加了

"spark.driver.extraClassPath" : "absolute/path/to/spark-csv_2.10-1.4.0.jar",
"spark.executor.extraClassPath" : "absolute/path/to/spark-csv_2.10-1.4.0.jar",

然后我得到以下错误:

java.lang.NoClassDefFoundError: org/apache/commons/csv/CSVFormat
Caused by: java.lang.ClassNotFoundException: org.apache.commons.csv.CSVFormat

然后我在两台机器上都添加了 commons-csv-1.4.jar 并添加了:

"spark.driver.extraClassPath" : "/absolute/path/to/spark-csv_2.10-1.4.0.jar:/absolute/path/to/commons-csv-1.4.jar",
"spark.executor.extraClassPath" : "/absolute/path/to/spark-csv_2.10-1.4.0.jar:/absolute/path/to/commons-csv-1.4.jar",

这解决了我的问题。

【讨论】:

  • 我正在使用 [spark-jobserver] 并且遇到了类似的问题。我在 plugins.sbt 文件中添加了libraryDependencies += "com.databricks" % "spark-csv_2.10" % "1.4.0" libraryDependencies += "org.apache.commons" % "commons-csv" % "1.4",但它没有帮助。还有其他输入吗?谢谢
  • 我相信这个链接应该会有所帮助:github.com/spark-jobserver/spark-jobserver#dependency-jars 如果您选择使用dependent-jar-uris,您必须在 Driver 机器上单独上传 jars(我不确定您是否必须在 worker 上上传机器与否)我从未尝试在使用作业服务器时自己添加依赖项,但这应该可以工作
  • @Nagesh,请参阅 Shashi K 的评论。
  • @ShashiK,当对特定的人发表评论时,请使用他们的@ 句柄以便通知他们。我已经在上面为你完成了。
猜你喜欢
  • 2018-12-01
  • 2021-09-13
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多