Spark v1からv2へのsparkアプリケーションの設定から移行しようとしています。 v1では、Spark ContextとSpark Configを使用して初期化します。しかし、Spark v2(クイックスタートガイド)の最新のドキュメントによると、Spark Sessionを使用する必要があります。設定がspark-submitを使用してcmdから渡されることが推奨されています(私が参照したものは、 :https://spark.apache.org/docs/latest/quick-start.html)。v1とv2のSpark Appの実行
以下は私のアプリです.Spark Sessionのもの(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 */
スパークの依存関係に%を使用してみてください – aclokay
問題の最初の部分は簡単な解決策でした:アプリケーションがあるフォルダがsrcフォルダ(Intellij)として定義されていることを確認してください。そのために、v1のアプローチを整理します。しかし、cmdでspark-submitを使用して実行しようとすると、同じクラスの「can not load class ...」エラーが発生しています。 ... sparkの依存関係に "提供された"%を追加しました。 –