SparkContext 和 SparkSession:如何获得“parallelizePairs()”?

Posted

技术标签:

【中文标题】SparkContext 和 SparkSession:如何获得“parallelizePairs()”?【英文标题】:SparkContext and SparkSession : How to get the "parallelizePairs()"? 【发布时间】:2017-09-10 04:00:35 【问题描述】:

我是 Spark 的新手,需要 parallelizePairs()(使用 Java)。

首先,我已经启动了我的驱动程序:

SparkSession spark = SparkSession
        .builder()
        .appName("My App")
        .config("driver", "org.postgresql.Driver")
        .getOrCreate(); 

但是spark 没有我需要的功能。只需parallelize()spark.sparkContext()

现在我很想添加

SparkConf sparkConf = new SparkConf();
sparkConf.setAppName("My App");
JavaSparkContext context = new JavaSparkContext(sparkConf);

这样,上下文就有了我需要的功能,但我在这里很困惑。

首先,我从来不需要JavaSparkContext,因为我正在使用spark-submit 运行并在那里设置主地址。

第二,为什么spark.sparkContext()JavaSparkContext不一样,怎么用SparkSession得到呢?

如果我在命令行中传递master,我必须设置sparkConf.setMaster( '<master-address-again>' )吗?

我已经读过这个:How to create SparkSession from existing SparkContext 并没有解决问题,但我真的需要构建器方式,因为我需要将 .config("driver", "org.postgresql.Driver") 传递给它。

请在这里点亮...

编辑

    Dataset<Row> graphDatabaseTable = spark.read()
            .format("jdbc")
            .option("url", "jdbc:postgresql://192.168.25.103:5432/graphx")
            .option("dbtable", "public.select_graphs")
            .option("user", "postgres")
            .option("password", "admin")
            .option("driver", "org.postgresql.Driver")
            .load();        
    SQLContext graphDatabaseContext = graphDatabaseTable.sqlContext();
    graphDatabaseTable.createOrReplaceTempView("select_graphs");

    String sql = "select * from select_graphs where parameter_id = " + indexParameter;          
    Dataset<Row> graphs = graphDatabaseContext.sql(sql);

【问题讨论】:

【参考方案1】:

使用现有的SparkContext 初始化JavaSparkContext

JavaSparkContext context = JavaSparkContext(spark.sparkContext());

为什么 spark.sparkContext() 与 JavaSparkContext 不一样以及如何使用 SparkSession 获取它

简而言之,因为 Scala 是比 Java 更丰富的语言,而 JavaSparkContext 是一个方便的包装器,旨在绕过一些 Java 限制。同时 RDD API 被移到一边。

如果我在命令行中传递master,我必须设置sparkConf.setMaster('')

没有。优先级为:

配置文件 spark 提交选项 SparkConfSparkContext 选项。

但我确实需要构建器方式,因为我需要将 .config("driver", "org.postgresql.Driver") 传递给它。

看起来不太对劲。 driver 选项由DataFrameWriterDataFrameReader 使用。它应该在那里传递。

【讨论】:

非常详细。谢谢。我喜欢这样的答案。 关于driver 选项:是的,我犯了一个错误。看看我的编辑,请给我你的意见。【参考方案2】:
sparkContext = SparkSession.sparkContext();

SparkSession spark = SparkSession
    .builder()
    .appName("My App")
    .config("driver", "org.postgresql.Driver")
    .getOrCreate(); 
sparkContext = spark.sparkContext;

【讨论】:

以上是关于SparkContext 和 SparkSession:如何获得“parallelizePairs()”?的主要内容,如果未能解决你的问题,请参考以下文章

SparkConf和SparkContext

SparkContext、JavaSparkContext、SQLContext和SparkSession的区别?

一个SparkContext对应多个SparkSession

一个SparkContext对应多个SparkSession

一个SparkContext对应多个SparkSession

spark教程-SparkContext 和 RDD 算子