我使用JavaSparkContext将JavaRDD编写为目标文件:
JavaSparkContext sc = new JavaSparkContext(conf); //where conf is a SparkConf
JavaRDD<MyClass> something;
something.saveAsObjectFile("path");
我可以使用以下方法轻松加载此文件:
JavaRDD<MyClass> loaded = sc.objectFile("path);
现在,在同一个程序中,我想加载目标文件并使用SparkSession,以便从另一个文件创建一个DataFrame,所以我正在使用:
SparkSession spark = SparkSession.builer()
.appName("someName")
.master("local")
.getOrCreate();
有没有办法使用spark
而不是JavaSparkContext加载目标文件?
我已尝试在同一程序中创建JavaSparkContext实例,但我收到错误:
SparkException:此JVM中只能运行一个SparkContext(请参阅SPARK-2243)。
我知道SparkSession封装了SparkContext,但我怎样才能做到我想要的(用Java)?有没有办法从SparkSession获取JavaSparkContext?我可以使用另一种方法使用SparkSession而不是JavaSparkContext来编写目标文件(我想将其保存为压缩而不是原始文本)?
答案 0 :(得分:1)
SparkSession将SparkContext和SqlContext结合在同一个应用程序中,如果您在创建SparkContext后尝试初始化SparkSession,它将抛出异常。所以最好只使用SparkSession。无论如何,您可以在SparkSession初始化之前立即停止SparkContext并继续使用SqlContext + SparkContext。
答案 1 :(得分:0)
解决方案非常简单:
JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext());
所以我不确定我是否应该保留这篇文章。