2017-08-06 61 views
1

我試圖從使用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)。針對v1和v2運行Spark應用程序

下面是我的應用程序,Spark會將所有東西(v2)註釋掉,顯示我將如何運行v1。如果我像這樣運行它,我得到錯誤'未能初始化Spark上下文'。然後,如果我重新排列我的評論以運行Spark會話(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 */ 
+0

嘗試使用%提供的火花依賴關係 – aclokay

+0

該問題的第一部分有一個簡單的解決方案:確保應用程序所在的文件夾被定義爲src文件夾(Intellij)。所以,這就解決了第一種方法。但是,當我嘗試在cmd上使用spark-submit運行時,仍然出現「無法加載類...」錯誤。 ...我還將%「提供」添加到火花依賴項上。 –

回答

1

好了,解決了。我的評論中已經提到了v1的解決方案。

對於v2,我按照這封信的快速入門指南,除了這一件事: 它歸結爲將類移動到名爲'scala'而不是'scala-2.11'(Intellij)的src文件夾中, 。 我也跑了重建,但不知道這是否有效果。

似乎微不足道,但它整理了問題。

相關問題