我最近更新到
Spark 2.4.3
和 Scala 2.12.3
(来自 Spark 2.0.0),并且在编译非常简单的代码(加载和显示)时遇到问题。
我的 sbt 1.2.8 的 build.sbt 是:
name := "my-program"
version := "1.0"
scalaVersion := "2.12"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.3"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.3"
libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.4.3"
我正在使用 Scala for Eclipse 进行开发,并且 jars
spark-core_2.12_2.4.3.jar
、spark-mllib_2.12_2.4.3.jar
和 spark-sql_2.12_2.4.3.jar
链接到我的构建路径(Eclipse 显示没有错误)。
我用自制软件更新了 Spark、scala 和 sbt。我不知道这是否会扰乱 sbt 找到罐子的方式?
我多次尝试了 sbt clean 包和 sbt 包,但我得到的是:
[error] /Users/me/myproject/src/main/scala/Analysis.scala:5:12: object apache is not a member of package org
[error] import org.apache.spark.sql.SparkSession
我不知道该尝试什么。
分析.scala:
package main.scala
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object Analysis {
def main(args: Array[String]) {
// Start Spark session
val spark = SparkSession.builder().getOrCreate()
import spark.implicits._
// Reduce verbosity of output when running in console
spark.sparkContext.setLogLevel("WARN")
val df = spark.read
// Format read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("parserLib", "UNIVOCITY")
.option("inferSchema", "true")
.json("data/transaction.txt")
df.printSchema()
}
}
在你的 build.sbt 中指定 scala 的完整版本(
2.12.8
而不是2.12
)。它应该修复它(在我的情况下确实如此)。
scalaVersion := "2.12.8"
我不知道为什么 sbt 会发生这种情况。
肯定是Spark和Scala版本的兼容性问题。请参阅此链接。
尝试Scala 版本 2.12.8 + Spark 版本 2.4.0。这对我有用。
build.sbt不在项目文件夹(/Users/me/myproject/)中,而是在src文件夹(/Users/me/myproject/src)中,所以当我进行sbt打包时,它从未找到我的build.sbt ,因此存在依赖性问题。
如果您的问题仍然存在,您可以尝试使用sparkConf对象触发,如下所示,这将对您的场景有所帮助。
val SparkConf = new SparkConf().setAppName("MyApp").setMaster("local[*]")
val Spark = SparkSession.builder.config(sparkConf).getOrCreate()