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 提交选项SparkConf
和 SparkContext
选项。
但我确实需要构建器方式,因为我需要将 .config("driver", "org.postgresql.Driver") 传递给它。
看起来不太对劲。 driver
选项由DataFrameWriter
和DataFrameReader
使用。它应该在那里传递。
【讨论】:
非常详细。谢谢。我喜欢这样的答案。 关于driver
选项:是的,我犯了一个错误。看看我的编辑,请给我你的意见。【参考方案2】:
sparkContext = SparkSession.sparkContext();
SparkSession spark = SparkSession
.builder()
.appName("My App")
.config("driver", "org.postgresql.Driver")
.getOrCreate();
sparkContext = spark.sparkContext;
【讨论】:
以上是关于SparkContext 和 SparkSession:如何获得“parallelizePairs()”?的主要内容,如果未能解决你的问题,请参考以下文章
SparkContext、JavaSparkContext、SQLContext和SparkSession的区别?
一个SparkContext对应多个SparkSession
一个SparkContext对应多个SparkSession