Разница между SparkContext, JavaSparkContext, SQLContext и SparkSession?
- В чем разница между
SparkContext,
JavaSparkContext,
SQLContext
и SparkSession
?
- Есть ли способ конвертировать или создавать контекст, используя
SparkSession
?
- Могу ли я полностью заменить все контексты, используя одну запись
SparkSession
?
- Все ли функции в
SQLContext
, SparkContext
и JavaSparkContext
также в SparkSession
?
- Некоторые функции, такие как
parallelize
, имеют различное поведение в SparkContext
и JavaSparkContext
. Как они ведут себя в SparkSession
?
Как я могу создать следующее, используя 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?
- СДР можно создать из
sparkSession.sparkContext.parallelize(???)
- JavaRDD то же самое относится и к этому, но в реализации Java
- JavaPairRDD
sparkSession.sparkContext.parallelize(???).map(//making your data as key-value pair here is one way)
- Набор данных, который возвращает 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