我已经使用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来写目标文件(我想将其保存为压缩文件而不是原始文本)?
最佳答案
SparkSession结合了SparkContext和SqlContext,因此在同一应用程序中,如果您在创建SparkContext之后尝试初始化SparkSession,它将引发异常。因此,最好仅使用SparkSession。无论如何,您都可以在初始化SparkSession之前立即停止SparkContext并继续使用SqlContext + SparkContext。
关于java - 在Java中从SparkSession读取目标文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42066777/