我正在尝试从使用 Spark v1 设置我的 spark 应用程序转移到 v2。在 v1 中,我将使用 Spark Context 和 Spark Config 进行初始化。但是,根据 Spark v2 的最新文档(快速入门指南),我应该使用 Spark Session,建议使用 spark-submit 从 cmd 传递配置(我所提到的所有内容都显示在本页底部附近:https ://spark.apache.org/docs/latest/quick-start.html )。
下面是我的应用程序,其中 Spark Session 的东西 (v2) 被注释掉了,展示了我将如何为 v1 运行东西。如果我这样运行它,我会收到错误“无法初始化 Spark 上下文”。然后,如果我重新安排我的评论以运行 Spark Session (v2) 的内容,并通过将应用程序打包为 JAR 并在 cmd 中使用 spark-submit 来运行它(根据上面已经引用的相同指南),我会收到错误: "无法从 JAR 文件加载主类:/C:/"
我正在更改我的 SPARK_HOME 变量以指向正确的版本,并且我正在更改为构建文件中的适当版本。
这是应用程序:
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.sql.SparkSession
object Pack {
def main(args: Array[String]) {
val conf = new SparkConf().setMaster("local[*]").setAppName("Pack")
.set("spark.executor.memory", "2g")
val sc = new SparkContext(conf)
/* val spark = SparkSession.builder.appName("PackTest").getOrCreate() */
val logFile = "C:/Spark/spark-2.2.0-bin-hadoop2.7/bin/README.md"
val logData = sc.textFile(logFile).cache()
/* val logData = spark.read.textFile(logFile).cache() */
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println(s"Lines with a: $numAs, Lines with b: $numBs")
/* spark.stop() */
}
}
这是 sbt 构建文件:
name := "Pack"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1" /* 2.2.0
when trying sparksession */
libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.6.1" /* 2.2.0
when trying sparksession */