从java中的SparkSession读取目标文件

时间:2017-02-06 11:32:44

标签: java apache-spark rdd

我使用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来编写目标文件(我想将其保存为压缩而不是原始文本)?

2 个答案:

答案 0 :(得分:1)

SparkSession将SparkContext和SqlContext结合在同一个应用程序中,如果您在创建SparkContext后尝试初始化SparkSession,它将抛出异常。所以最好只使用SparkSession。无论如何,您可以在SparkSession初始化之前立即停止SparkContext并继续使用SqlContext + SparkContext。

答案 1 :(得分:0)

解决方案非常简单:

JavaSparkContext sc = JavaSparkContext.fromSparkContext(spark.sparkContext());

所以我不确定我是否应该保留这篇文章。