我有一个Spark应用程序,它使用带有SparkSession
的Spark 2.0新API。
我正在使用SparkContext
的另一个应用程序之上构建此应用程序。我想将SparkContext
传递给我的应用,并使用现有的SparkSession
初始化SparkContext
。
但是我找不到办法如何做到这一点。我发现带有SparkSession
的{{1}}构造函数是私有的,因此我无法以这种方式初始化它,并且构建器不提供任何SparkContext
方法。你认为有一些解决方法吗?
答案 0 :(得分:14)
显然,如何从现有SparkSession
初始化SparkContext
。
答案 1 :(得分:14)
与上面的示例一样,您无法创建,因为SparkSession
的构造函数是私有的
相反,你可以使用SQLContext
创建一个SparkContext
,然后从sqlcontext中获得这样的兴趣
val sqlContext=new SQLContext(sparkContext);
val spark=sqlContext.sparkSession
希望这有帮助
答案 2 :(得分:5)
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;
}
答案 3 :(得分:3)
val sparkSession = SparkSession.builder.config(sc.getConf).getOrCreate()
答案 4 :(得分:3)
从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()
希望有帮助!
答案 5 :(得分:1)
您会注意到我们正在使用SparkSession和SparkContext,这不是错误。让我们重新审视Spark历史的历史。重要的是要了解我们来自哪里,因为您将在未来一段时间内听到这些连接对象。
在Spark 2.0.0之前,三个主要的连接对象是SparkContext,SqlContext和HiveContext。 SparkContext对象是与Spark执行环境的连接并创建了RDD和其他对象,SQLContext在SparkContext的后台使用SparkSQL,HiveContext与Hive存储进行交互。
Spark 2.0.0引入了Datasets / DataFrames作为主要的分布式数据抽象接口,SparkSession对象作为Spark执行环境的入口点。适当地,SparkSession对象位于命名空间org.apache.spark.sql.SparkSession(Scala)或pyspark.sql.sparkSession中。需要注意的几点如下:
在Scala和Java中,数据集将主数据抽象形成为类型化数据;但是,对于Python和R(没有编译时类型检查),数据......