【问题标题】:read object file from SparkSession in java从 Java 中的 SparkSession 读取目标文件
【发布时间】:2017-02-06 11:32:44
【问题描述】:

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

【问题讨论】:

    标签: java apache-spark rdd


    【解决方案1】:

    SparkSession 结合了 SparkContext 和 SqlContext,因此在同一个应用程序中,如果您在创建 SparkContext 后尝试初始化 SparkSession,它将引发异常。所以最好只使用 SparkSession。在任何情况下,您都可以在 SparkSession 初始化之前立即停止 SparkContext 并继续使用 SqlContext + SparkContext。

    【讨论】:

      【解决方案2】:

      解决方法很简单:

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

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

      【讨论】:

        猜你喜欢
        • 2012-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多