Разница между SparkContext, JavaSparkContext, SQLContext и SparkSession?

  1. В чем разница между SparkContext, JavaSparkContext, SQLContext и SparkSession?
  2. Есть ли способ конвертировать или создавать контекст, используя SparkSession?
  3. Могу ли я полностью заменить все контексты, используя одну запись SparkSession?
  4. Все ли функции в SQLContext, SparkContext и JavaSparkContext также в SparkSession?
  5. Некоторые функции, такие как parallelize, имеют различное поведение в SparkContext и JavaSparkContext. Как они ведут себя в SparkSession?
  6. Как я могу создать следующее, используя SparkSession?

    • RDD
    • JavaRDD
    • JavaPairRDD
    • Dataset

Есть ли способ превратить JavaPairRDD в Dataset или Dataset в JavaPairRDD?

Ответ 1

sparkContext является точкой входа в реализацию Scala, а JavaSparkContext является java-оберткой для sparkContext.

SQLContext является точкой входа в SparkSQL, которую можно получить от sparkContext. До версии 2.xx, RDD, DataFrame и Data-set были тремя различными абстракциями данных. С тех пор Spark 2.xx, все три абстракции данных объединены и SparkSession является единой точкой входа в Spark.

Дополнительное примечание: RDD предназначен для неструктурированных данных, строго типизированные данные и DataFrames для структурированных и слабо типизированных данных. Вы можете проверить

Есть ли способ конвертировать или создавать контекст с помощью Sparksession?

да. его sparkSession.sparkContext() и для SQL, sparkSession.sqlContext()

Могу ли я полностью заменить весь контекст, используя одну запись SparkSession?

да. вы можете получить соответствующие контексты из sparkSession.

Все ли функции в SQLContext, SparkContext, JavaSparkContext и т.д. Добавлены в SparkSession?

Не напрямую. Вы должны получить соответствующий контекст и использовать его. Что-то вроде обратной совместимости

Как использовать такую функцию в SparkSession?

получить соответствующий контекст и использовать его.

Как создать следующее с помощью SparkSession?

  1. СДР можно создать из 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, - это набор данных, если это структурированные данные.

Ответ 2

Объяснение из искрового исходного кода в ветке-2.1

SparkContext:Основная точка входа для функциональности Spark. SparkContext представляет соединение с Spark кластер и может использоваться для создания RDD, аккумуляторов и широковещательных переменных в этом кластере.

Только один SparkContext может быть активен для JVM. Вы должны stop() активного SparkContext до создавая новый. Это ограничение может быть в конечном итоге удалено; см. SPARK-2243 для более подробной информации.

JavaSparkContext:Java-friendly версия [[org.apache.spark.SparkContext]], которая возвращает [[org.apache.spark.api.java.JavaRDD]] s и работает с коллекциями Java вместо Scala.

Только один SparkContext может быть активен для JVM. Вы должны stop() активного SparkContext до создавая новый. Это ограничение может быть в конечном итоге удалено; см. SPARK-2243 для более подробной информации.

SQLContext:Точка входа для работы со структурированными данными (строки и столбцы) в Spark 1.x.

С Spark 2.0 это заменяется на [[SparkSession]]. Однако мы сохраняем класс здесь для обратной совместимости.

SparkSession:Точка входа в программирование Spark с помощью набора данных и API DataFrame.

Ответ 3

Spark Context - это класс в Spark API, который является первым этапом для создания искрового приложения. Функциональность контекста искры заключается в создании памяти в ОЗУ, мы называем это как память драйвера, распределение количества исполнителей и ядер, короче говоря, все о управлении кластером. Spark Context может использоваться для создания RDD и общих переменных. Чтобы получить доступ к этому, нам нужно создать его объект.

Таким образом, мы можем создать Spark Context:: var sc = new SparkContext()

Spark Session - это новый объект, добавленный после искры 2.x, который является заменой контекста контекста и контекста Sql. Раньше у нас было два варианта, таких как Sql Context, который является способом выполнения операции sql в Dataframe, а второй - контекстом Hive Context, который управляет связью, связанной с связью, и извлекает/вставляет данные из/в таблицы улья.

С приходом 2.x Мы можем создать SparkSession для операции SQL в Dataframe, и если у вас есть работа, связанная с Hive, просто вызовите метод enablehivesupport(), вы можете использовать SparkSession для операций SQL DataFrame и hive.

Таким образом, мы можем создать SparkSession для операции Sql в Dataframe

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

Второй способ - создать SparkSession для работы Sql в Dataframe, а также в режиме Hive.

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

Ответ 4

Я буду говорить только о Spark версии 2.x.

SparkSession: Это главная точка входа в ваше искровое приложение. Чтобы запустить любой код на вашей искре, это первое, что вы должны создать.

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 вы можете создавать RDD, accumlator и Broadcast variables.

в большинстве случаев вам не понадобится SparkContext. Вы можете получить SparkContext из SparkSession

val sc = spark.sparkContext