我使用 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: Only one SparkContext may be running in this JVM (see 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/