如何从现有的 SparkContext 创建 SparkSession

How to create SparkSession from existing SparkContext

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

但是我找不到如何做到这一点的方法。我发现带有 SparkContextSparkSession 构造函数是私有的,所以我不能以这种方式初始化它,并且构建器不提供任何 setSparkContext 方法。你认为有一些解决方法吗?

显然无法从现有 SparkContext.

初始化 SparkSession
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;
}

像上面的例子一样你不能创建因为SparkSession的构造函数是私有的 相反,您可以使用 SparkContext 创建一个 SQLContext,然后像这样

从 sqlcontext 获取 sparksession
val sqlContext=new SQLContext(sparkContext);
val spark=sqlContext.sparkSession

希望对您有所帮助

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

SparkContext 甚至 SparkConf 中导出 SparkSession 对象很容易。只是您可能会发现 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()

希望对您有所帮助!