2017-03-21 9 views
7

私はSparkSessionでSpark 2.0の新しいAPIを使用するSparkアプリケーションを持っています。 SparkContextを使用している別のアプリケーションの上にこのアプリケーションを構築しています。 SparkContextを私のアプリケーションに渡して、SparkContextを使用してSparkSessionを初期化します。既存のSparkContextからSparkSessionを作成するには

しかし、私はそれを行う方法を見つけることができませんでした。私は、SparkContextSparkSessionコンストラクタがプライベートなので、それを初期化することはできず、ビルダーはsetSparkContextメソッドを提供していないことがわかりました。いくつかの回避策があると思いますか?

+0

私は非常によく分からないが、私の知識ターに応じて回避策 – BDR

+0

いやではありません:(ので、回避策がない場合は、2つのオプションがあります:アプリケーションでSparkContextを使用するか、sparkSessionのサポートを上に追加します(spark-jobserverですが、ブランクspark-2.0プレビューを使用していますが、 –

+0

外部のSparkContextのサポートをアプリケーションに追加し、session.sparkContextにアクセスする必要があります大きな問題ではありません –

答えて

6

どうやら、からSparkSessionを初期化する方法はありません。

5
public JavaSparkContext getSparkContext() 
{ 
     SparkConf conf = new SparkConf() 
        .setAppName("appName") 
        .setMaster("local[*]"); 
     JavaSparkContext jsc = new JavaSparkContext(conf); 
     return jsc; 
} 


public SparkSession getSparkSession() 
{ 
     sparkSession= new SparkSession(getSparkContext().sc()); 
     return sparkSession; 
} 


you can also try using builder 

public SparkSession getSparkSession() 
{ 
     SparkConf conf = new SparkConf() 
         .setAppName("appName") 
         .setMaster("local"); 

     SparkSession sparkSession = SparkSession 
            .builder() 
            .config(conf) 
            .getOrCreate(); 
     return sparkSession; 
} 
+0

2番目のメソッドでは、sparkコンテキストを使用しないで、scalaでgetSparkSession()のようにSparkSessionを構築することはできません。 –

6

ようSparkSessionのコンストラクタが代わりにあなたがSparkContextを使用してSQLContextを作成し、後でこの

val sqlContext=new SQLContext(sparkContext); 
val spark=sqlContext.sparkSession 

ようsqlcontextからsparksessionを得ることができます プライベートであるため、上記の例では、あなたが作成することはできません。これが役に立ちますようにお願いします。

1

あなたはSparkSessionとSparkContextを使用していることに気がつきましたが、これはエラーではありません。視点のためにスパークの歴史を再訪しましょう。私たちがどこから来たのかを理解することが重要です。これらの接続オブジェクトについては、今後何度か聞きます。

Spark 2.0.0より前の3つの主な接続オブジェクトは、SparkContext、SqlContext、およびHiveContextでした。 SparkContextオブジェクトは、Spark実行環境への接続であり、RDDなどの作成、SparkContextのバックグラウンドでSparkSQLで動作するSQLContext、Hiveストアと相互作用するHiveContextです。

Spark 2.0.0は、主な分散データ抽象化インタフェースとしてDatasets/DataFramesを、Spark実行環境のエントリポイントとしてSparkSessionオブジェクトを導入しました。適切には、SparkSessionオブジェクトは、名前空間、org.apache.spark.sql.SparkSession(Scala)、またはpyspark.sql.sparkSessionにあります。注意すべき点は次のとおりです。

ScalaとJavaでは、データセットは型付きデータとしての主なデータ抽象化を形成します。しかし、(時の型チェックをコンパイルする必要はありません)PythonとRのために、データ...

https://www.packtpub.com/mapt/book/big_data_and_business_intelligence/9781785889271/4/ch04lvl1sec31/sparksession-versus-sparkcontext

関連する問題