如何从现有的SparkContext创建SparkSession

Ste*_*cek 22 scala apache-spark apache-spark-2.0

我有一个使用Spark 2.0新API的Spark应用程序SparkSession.我正在使用另一个应用程序之上构建此应用程序SparkContext.我想传递SparkContext给我的应用程序并SparkSession使用现有的初始化SparkContext.

但是我找不到怎么做的方法.我发现SparkSession构造函数SparkContext是私有的,所以我不能以这种方式初始化它,构建器不提供任何setSparkContext方法.你认为有一些解决方法吗?

小智 17

就像在上面的例子中你不能创建因为SparkSession构造函数是私有的而是你可以创建一个SQLContext使用SparkContext,然后从sqlcontext获取sparksession就像这样

val sqlContext=new SQLContext(sparkContext);
val spark=sqlContext.sparkSession
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 当我在Spark 2.2中执行此操作时,它表示不推荐使用SQLContext并使用SparkSession.Builder()代替 (4认同)

Ste*_*cek 15

显然,没有办法如何SparkSession从现有的初始化SparkContext.


Mos*_*ani 6

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;
}
Run Code Online (Sandbox Code Playgroud)


Ris*_*abh 6

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()
Run Code Online (Sandbox Code Playgroud)

希望有帮助!

  • val Spark = SparkSession.builder.config(conf).getOrCreate() 而不是 sc.getConf 因为您已经有了conf。 (2认同)

los*_*l29 5

val sparkSession = SparkSession.builder.config(sc.getConf).getOrCreate()
Run Code Online (Sandbox Code Playgroud)

  • 请编辑您的答案,以包含有关为什么以及如何解决OP问题的详细信息。 (3认同)