2016-10-05 15 views
0

次のSparkテストプログラムを正常に実行しました。このプログラムでは、SparkContextクラスの "cassandraTable"メソッドと "getOrCreate"メソッドに注目しています。しかし、私はこのクラスのSpark Scala APIドキュメントで見つけることができません。このコードの理解に欠けているものは何ですか?私はDatastax Connectorがsbtにあるとき、このSparkContextがどう違うかを理解しようとしています。DataStax Spark CassandraコネクタはどのようにSparkContextを作成しますか?

コード -

import org.apache.spark.{SparkContext, SparkConf} 
import com.datastax.spark.connector._ 

object CassandraInt { 

def main(args:Array[String]){ 

    val SparkMasterHost = "127.0.0.1" 
    val CassandraHost = "127.0.0.1" 
    val conf = new SparkConf(true) 
    .set("spark.cassandra.connection.host", CassandraHost) 
    .set("spark.cleaner.ttl", "3600") 
    .setMaster("local[12]") 
    .setAppName(getClass.getSimpleName) 

    // Connect to the Spark cluster: 
    lazy val sc = SparkContext.getOrCreate(conf) 

    val rdd = sc.cassandraTable("test", "kv") 
    println(rdd.count) 
    println(rdd.map(_.getInt("value")).sum)  
    }} 

私が使用しbuild.sbtファイルがある -

name := "Test Project" 
version := "1.0" 
scalaVersion := "2.11.7" 

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.0.0" 
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.0.0" 

addCommandAlias("c1", "run-main CassandraInt") 

libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector" % "2.0.0-M3" 

fork in run := true 

答えて

2

それは違いはありません。

この関数は、取得またはSparkContextをインスタンス化し、シングルトンオブジェクトとして登録するために使用することができる。スパークは、唯一の活性SparkContextgetOrCreatethe companion object上で定義された方法でサポートしています。 JVMごとにアクティブなSparkContextを1つしか持てないため、アプリケーションがSparkContextを共有したい場合に便利です。

このメソッドでは、SparkConfを渡すことはできません(検索するだけで便利です)。

要約すると:

  • を、それを返すアクティブなコンテキストがある場合。
  • それ以外の場合は、新しいものを作成します。

cassandraTableは、implicit conversionを使用して公開されたSparkContextFunctionsの方法です。

関連する問題