Как создать SparkSession из существующего SparkContext

У меня есть приложение Spark, которое использует новый API Spark 2.0 с SparkSession. Я создаю это приложение поверх другого приложения, которое использует SparkContext. Я хотел бы передать SparkContext в мое приложение и инициализировать SparkSession с помощью существующего SparkContext.

Однако я не мог найти способ, как это сделать. Я обнаружил, что конструктор SparkSession с SparkContext является закрытым, поэтому я не могу его инициализировать таким образом, и строитель не предлагает никакого метода setSparkContext. Как вы думаете, существует ли какое-то обходное решение?

Ответ 1

По-видимому, нет способа инициализировать SparkSession из существующего SparkContext.

Ответ 2

Как и в примере выше, вы не можете создать, потому что конструктор SparkSession является закрытым Вместо этого вы можете создать SQLContext с помощью SparkContext, а затем получить sparksession из sqlcontext, как это

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

Надеюсь, что это поможет

Ответ 3

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;
}

Ответ 4

Вы заметили бы, что мы используем SparkSession и SparkContext, и это не ошибка. Позвольте вернуться к летописи истории искры для перспективы. Важно понять, откуда мы пришли, поскольку вы будете слышать об этих объектах связи в течение некоторого времени.

До Spark 2.0.0 тремя основными объектами подключения были SparkContext, SqlContext и HiveContext. Объект SparkContext был соединением с средой выполнения Spark и созданными RDD и другими, SQLContext работал с SparkSQL на фоне SparkContext, а HiveContext взаимодействовал с магазинами Hive.

В Spark 2.0.0 введены наборы данных /DataFrames в качестве основного интерфейса абстракции данных и объекта SparkSession в качестве точки входа в среду выполнения Spark. Соответственно, объект SparkSession находится в пространстве имен, org.apache.spark.sql.SparkSession(Scala) или pyspark.sql.sparkSession. Несколько замечаний:

В Scala и Java, Datasets образуют основную абстракцию данных в виде типизированных данных; однако для Python и R (которые не имеют проверки типа времени компиляции) данные...

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

Ответ 5

val sparkSession = SparkSession.builder.config(sc.getConf).getOrCreate()

Ответ 6

SparkSession объект SparkSession из SparkContext или даже SparkConf легко. Просто вы можете обнаружить, что API немного запутан. Вот пример (я использую Spark 2.4 но это должно работать и в более старых версиях 2.x):

// If you already have SparkContext stored in 'sc'
val spark = SparkSession.builder.config(sc.getConf).getOrCreate()

// Another example which builds a SparkConf, SparkContext and SparkSession
val conf = new SparkConf().setAppName("spark-test").setMaster("local[2]")
val sc = new SparkContext(conf)
val spark = SparkSession.builder.config(sc.getConf).getOrCreate()

Надеюсь, это поможет!