为v1和v2运行Spark App

时间:2017-08-06 09:12:35

标签: apache-spark jar version config spark-submit

我正在尝试从使用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会话内容(v2)被注释掉,显示了我将如何为v1运行。如果我像这样运行它,我会收到错误'无法初始化Spark Context'。然后,如果我重新安排我的评论为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 */

1 个答案:

答案 0 :(得分:1)

好的,解决了。我的评论中已经提到了v1的解决方案。

对于v2,我遵循了这封信的快速入门指南,除了这一点: 它归结为将类移动到名为' scala'的src文件夹中。而不是' scala-2.11' (的IntelliJ)。 我也进行了重建,但不知道这是否有影响。

似乎微不足道,但它解决了问题。