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?
Apparemment, il n'y a aucun moyen d'initialiser SparkSession
à partir de SparkContext
existant.
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
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;
}
val sparkSession = SparkSession.builder.config(sc.getConf).getOrCreate()
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!
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 ...