web-dev-qa-db-fra.com

Comment créer SparkSession à partir de SparkContext existant

J'ai une application Spark utilisant la nouvelle API Spark 2.0 avec SparkSession. Je construis cette application par-dessus une autre application utilisant SparkContext. Je souhaite passer SparkContext à mon application et initialiser SparkSession à l'aide de SparkContext existant. 

Cependant, je ne pouvais pas trouver un moyen de le faire. J'ai trouvé que le constructeur SparkSession avec SparkContext est privé, je ne peux donc pas l'initialiser de cette manière et le constructeur ne propose aucune méthode setSparkContext. Pensez-vous qu'il existe une solution de contournement? 

15
Stefan Repcek

Apparemment, il n'y a aucun moyen d'initialiser SparkSession à partir de SparkContext existant.

12
Stefan Repcek

Comme dans l'exemple ci-dessus, vous ne pouvez pas créer car le constructeur de SparkSession est privé Vous pouvez créer une SQLContext à l'aide de SparkContext et obtenir plus tard la sparksession du sqlcontext comme ceci

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

J'espère que cela t'aides

13
Partha Sarathy
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;
}
5
Mostwanted Mani
val sparkSession = SparkSession.builder.config(sc.getConf).getOrCreate()
2
lostsoul29

Dériver l'objet SparkSession à partir de SparkContext ou même SparkConf est facile. Juste que vous pourriez trouver l'API pour être légèrement alambiqué. Voici un exemple (j'utilise Spark 2.4 mais cela devrait également fonctionner dans les versions plus anciennes de 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()

J'espère que cela pourra aider!

1
Rishabh

Vous auriez remarqué que nous utilisons SparkSession et SparkContext, et ce n'est pas une erreur. Reprenons les annales de l'histoire de Spark pour une perspective. Il est important de comprendre d'où nous venons, car vous entendrez parler de ces objets de connexion pendant un certain temps.

Avant Spark 2.0.0, les trois principaux objets de connexion étaient SparkContext, SqlContext et HiveContext. L'objet SparkContext était la connexion à un environnement d'exécution Spark et créait des RDD et autres, SQLContext fonctionnait avec SparkSQL en arrière-plan de SparkContext et HiveContext interagissait avec les magasins Hive.

Spark 2.0.0 a introduit Datasets/DataFrames en tant que principale interface d'abstraction de données distribuée et que l'objet SparkSession en tant que point d'entrée dans un environnement d'exécution Spark. De manière appropriée, l'objet SparkSession se trouve dans l'espace de noms, org.Apache.spark.sql.SparkSession (Scala) ou pyspark.sql.sparkSession. Quelques points à noter sont les suivants:

En Scala et en Java, les ensembles de données constituent la principale abstraction de données sous forme de données typées. cependant, pour Python et R (qui n'ont pas de vérification du type de compilation), les données ...

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

1
Raider Yang