wake-up-neo.com

So erstellen Sie SparkSession aus vorhandenem SparkContext

Ich habe eine Spark-Anwendung, die die neue API von Spark 2.0 mit SparkSession..__ verwendet. Ich baue diese Anwendung auf der anderen Anwendung, die SparkContext verwendet. Ich möchte SparkContext an meine Anwendung übergeben und SparkSession mit vorhandenen SparkContext initialisieren. 

Ich konnte jedoch keinen Weg finden, wie das geht. Ich fand, dass SparkSession constructor mit SparkContext privat ist, daher kann ich es nicht auf diese Weise initialisieren und der Builder bietet keine setSparkContext-Methode an. Denken Sie, dass es eine Problemumgehung gibt? 

15
Stefan Repcek

Anscheinend gibt es keine Möglichkeit, SparkSession von vorhandenen SparkContext zu initialisieren.

12
Stefan Repcek

Wie im obigen Beispiel können Sie nicht erstellen, da der Konstruktor von SparkSession privat ist Stattdessen können Sie eine SQLContext mithilfe von SparkContext erstellen und später die Sparksession aus dem sqlcontext abrufen

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

Hoffe das hilft

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

Das SparkSession-Objekt aus SparkContext oder sogar SparkConf abzuleiten, ist einfach. Nur, dass die API möglicherweise etwas verwoben ist. Hier ist ein Beispiel (Ich verwende Spark 2.4, aber das sollte auch in älteren 2.x-Versionen funktionieren):

// 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()

Hoffentlich hilft das!

1
Rishabh

Sie hätten bemerkt, dass wir SparkSession und SparkContext verwenden. Dies ist kein Fehler. Sehen wir uns die Annalen der Spark-Geschichte noch einmal an. Es ist wichtig zu verstehen, woher wir kommen, da Sie noch einige Zeit von diesen Verbindungsobjekten erfahren werden.

Vor Spark 2.0.0 waren die drei Hauptverbindungsobjekte SparkContext, SqlContext und HiveContext. Das SparkContext-Objekt stellte die Verbindung zu einer Spark-Ausführungsumgebung her und erstellte RDDs und andere, SQLContext arbeitete mit SparkSQL im Hintergrund von SparkContext und HiveContext interagierte mit den Hive-Stores.

Mit Spark 2.0.0 wurden Datasets/DataFrames als Hauptschnittstelle für verteilte Datenabstraktion und das SparkSession-Objekt als Einstiegspunkt in eine Spark-Ausführungsumgebung eingeführt. Das SparkSession-Objekt befindet sich entsprechend im Namespace org.Apache.spark.sql.SparkSession (Scala) oder pyspark.sql.sparkSession. Ein paar Punkte zu beachten:

In Scala und Java bilden Datensätze die Hauptdatenabstraktion als typisierte Daten. Bei Python und R (die keine Kompilierzeitprüfung durchführen) werden die Daten jedoch ...

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

1
Raider Yang