我正在做小scala程序,它将csv转换为镶木地板。
我正在使用databricks spark-csv。
这是我的build.sbt
name: = "tst"
version: = "1.0"
scalaVersion: = "2.10.5"
libraryDependencies++ = Seq(
"org.apache.spark" % % "spark-core" % "1.6.1" % "provided",
"org.apache.spark" % % "spark-sql" % "1.6.1",
"com.databricks" % "spark-csv_2.10" % "1.5.0",
"org.apache.spark" % % "spark-hive" % "1.6.1",
"org.apache.commons" % "commons-csv" % "1.1",
"com.univocity" % "univocity-parsers" % "1.5.1",
"org.slf4j" % "slf4j-api" % "1.7.5" % "provided",
"org.scalatest" % % "scalatest" % "2.2.1" % "test",
"com.novocode" % "junit-interface" % "0.9" % "test",
"com.typesafe.akka" % "akka-actor_2.10" % "2.3.11",
"org.scalatest" % % "scalatest" % "2.2.1",
"com.holdenkarau" % % "spark-testing-base" % "1.6.1_0.3.3",
"com.databricks" % "spark-csv_2.10" % "1.5.0",
"org.joda" % "joda-convert" % "1.8.1"
)
sbt package
之后,当我运行命令
spark-submit --master local[*] target/scala-2.10/tst_2.10-1.0.jar
我收到以下错误。
Exception in thread "main" java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.csv. Please find packages at http://spark-packages.org
我可以看到com.databricks_spark-csv_2.10-1.5.0.jar
命令下载~/.ivy2/jars/
中的sbt package
文件
dataconversion.scala
import org.apache.spark.sql.SQLContext
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object dataconversion {
def main(args: Array[String]) {
val conf =
new SparkConf()
.setAppName("ClusterScore")
.set("spark.storage.memoryFraction", "1")
val sc = new SparkContext(conf)
val sqlc = new SQLContext(sc)
val df = sqlc.read
.format("com.databricks.spark.csv")
.option("header", "true") // Use first line of all files as header
.option("inferSchema", "true") // Automatically infer data types
.load("/tmp/cars.csv")
println(df.printSchema)
}
}
如果我使用显式spark-submit
路径指定--jars
选项,我可以jar
无错误地执行。但那并不理想。请建议。
答案 0 :(得分:1)
使用sbt-assembly插件构建一个"胖罐"通过sbt assembly
包含所有您的依赖关系,然后在其上调用spark-submit
。
一般情况下,当您获得ClassNotFoundException
时,请尝试使用jar tvf target/scala-2.10/tst_2.10-1.0.jar
展开您创建的jar以查看其中的内容。检查常春藤缓存中的内容是没有意义的;这只是告诉你SBT找到了它。正如数学家所说,这是必要但不充分的。
答案 1 :(得分:0)
所需的库是必需的,因此您可以选择:
com.databricks_spark-csv_2.10-1.5.0.jar
放在本地或hdfs中
可到达的路径,并提供与--jars
参数--packages com.databricks:spark-csv_2.10:1.5.0
为您的流程提供必需的lib --jars