web-dev-qa-db-ja.com

SparkContext、JavaSparkContext、SQLContext、SparkSessionの違いは?

  1. 違いは何ですか SparkContext,JavaSparkContext,SQLContextおよびSparkSession
  2. SparkSessionを使用してコンテキストを変換または作成する方法はありますか?
  3. 単一のエントリSparkSessionを使用して、すべてのコンテキストを完全に置き換えることはできますか?
  4. SQLContextSparkContext、およびJavaSparkContextのすべての関数もSparkSessionにありますか?
  5. parallelizeのような一部の関数は、SparkContextJavaSparkContextで異なる動作をします。 SparkSessionでどのように動作しますか?
  6. SparkSessionを使用して以下を作成するにはどうすればよいですか?

    • RDD
    • JavaRDD
    • JavaPairRDD
    • Dataset

JavaPairRDDDatasetに、またはDatasetJavaPairRDDに変換する方法はありますか?

30
Mostwanted Mani

sparkContextはScala=実装エントリポイントであり、JavaSparkContextはJava sparkContextのラッパーです。

SQLContextsparkContextから受信できるSparkSQLのエントリポイントです。2.xxより前、RDD、DataFrameおよびData-setは3つの異なるデータ抽象化でした。SinceSpark 2.xx、3つのデータ抽象化はすべて統合され、SparkSessionはSparkの統合エントリポイントです。

追加の注意事項は、RDDは非構造化データ、厳密には型指定されたデータ、DataFrameは構造化された緩やかに型指定されたデータを意味します。 チェック

Sparksessionを使用してコンテキストを変換または作成する方法はありますか?

はい。そのsparkSession.sparkContext()およびSQLの場合、sparkSession.sqlContext()

単一のエントリSparkSessionを使用してすべてのコンテキストを完全に置き換えることはできますか?

はい。 sparkSessionからそれぞれのコンテキストを取得できます。

SQLContext、SparkContext、JavaSparkContextなどのすべての関数はSparkSessionに追加されますか?

直接ではありません。それぞれのコンテキストを取得し、それを利用する必要がありました。後方互換性のようなもの

SparkSessionでそのような関数を使用する方法は?

それぞれのコンテキストを取得して利用します。

SparkSessionを使用して以下を作成する方法は?

  1. RDDはsparkSession.sparkContext.parallelize(???)から作成できます
  2. JavaRDDもこれに適用されますが、Java実装
  3. JavaPairRDD sparkSession.sparkContext.parallelize(???).map(//making your data as key-value pair here is one way)
  4. SparkSessionが返すデータセットは、構造化データの場合はデータセットです。
29
Balaji Reddy

Branch-2.1のsparkソースコードからの説明

SparkContext: Spark機能のメインエントリポイント。 SparkContextはSparkクラスターへの接続を表し、そのクラスターでRDD、アキュムレーター、およびブロードキャスト変数を作成するために使用できます。

JVMごとにアクティブにできるSparkContextは1つだけです。新しいものを作成する前に、アクティブなSparkContextをstop()する必要があります。この制限は最終的に削除される可能性があります。詳細については、SPARK-2243を参照してください。

JavaSparkContext: [[org.Apache.spark.SparkContext]]のJava対応バージョンで、[[org.Apache.spark.api.Java.JavaRDD]]を返し、Java Scalaコレクションではなくコレクション。

JVMごとにアクティブにできるSparkContextは1つだけです。新しいものを作成する前に、アクティブなSparkContextをstop()する必要があります。この制限は最終的に削除される可能性があります。詳細については、SPARK-2243を参照してください。

SQLContext: Spark 1.xの構造化データ(行と列)を操作するためのエントリポイント。

Spark 2.0以降、これは[[SparkSession]]に置き換えられます。ただし、下位互換性のためにここにクラスを保持しています。

SparkSession: DatasetおよびDataFrame APIを使用したプログラミングSparkへのエントリポイント。

11
Deanzz

Spark ContextはSpark AP​​Iのクラス sparkアプリケーションを構築する最初の段階です。 sparkコンテキストの機能は、RAMにメモリを作成することです。これをドライバーメモリと呼びます。実行者とコアの数の割り当ては、要するにクラスター管理に関するものです。 Sparkコンテキストを使用して、RDDおよび共有変数を作成できます。これにアクセスするには、そのオブジェクトを作成する必要があります。

この方法でSparkコンテキストを作成できます:: var sc = new SparkContext()

Sparkセッション、これはspark 2.x以降に追加された新しいオブジェクトですこれは、SQLコンテキストとHiveコンテキストの置き換えです。以前は、Dataframeでsql操作を実行する方法であるSql Contextと、Hive接続関連のものを管理し、Hiveテーブルとの間でデータをフェッチ/挿入するHive Contextという2つのオプションがありました。

2.xが登場したため、DataframeでのSQL操作用にSparkSessionを作成できます。Hive関連の作業がある場合は、メソッドenablehivesupport()を呼び出すだけで、DataframeおよびHive関連のSQL操作の両方でSparkSessionを使用できます。

このようにして、DataframeでSQL操作用のSparkSessionを作成できます

val sparksession = SparkSession.builder()。getOrCreate();

2番目の方法は、Hive操作と同様に、DataframeでSQL操作用のSparkSessionを作成することです。

val sparkSession = SparkSession.builder()。enableHiveSupport()。getOrCreate()

1
Nilesh Shinde

Sparkバージョン2.xのみについて説明します。

SparkSession:これは、sparkアプリケーションのメインエントリポイントです。スパークでコードを実行するには、最初に作成する必要があります。

from pyspark.sql import SparkSession
spark = SparkSession.builder.master("local").appName("Word Count")\
.config("spark.some.config.option", "some-value")\
.getOrCreate()

SparkContext:これは、SparkSessionの内部オブジェクト(プロパティ)です。 Low-Level APIを介してSparkContextとやり取りするために使用され、RDDaccumlator、_Broadcast variablesを作成できます。

ほとんどの場合、SparkContextは必要ありません。 SparkContextからSparkSessionを取得できます

val sc = spark.sparkContext
0
Gaurang Shah