gpt4 book ai didi

apache-spark - SparkSession.sql 和 Dataset.sqlContext.sql 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 05:22:56 25 4
gpt4 key购买 nike

我有以下代码片段,我想知道这两者之间有什么区别,我应该使用哪一个?我正在使用 Spark 2.2。

Dataset<Row> df = sparkSession.readStream()
.format("kafka")
.load();

df.createOrReplaceTempView("table");
df.printSchema();

Dataset<Row> resultSet = df.sqlContext().sql("select value from table"); //sparkSession.sql(this.query);
StreamingQuery streamingQuery = resultSet
.writeStream()
.trigger(Trigger.ProcessingTime(1000))
.format("console")
.start();

对比
Dataset<Row> df = sparkSession.readStream()
.format("kafka")
.load();

df.createOrReplaceTempView("table");

Dataset<Row> resultSet = sparkSession.sql("select value from table"); //sparkSession.sql(this.query);
StreamingQuery streamingQuery = resultSet
.writeStream()
.trigger(Trigger.ProcessingTime(1000))
.format("console")
.start();

最佳答案

sparkSession.sql("sql query") 之间的一个非常细微的区别对比 df.sqlContext().sql("sql query") .

请注意,您可以有零个、两个或多个 SparkSession s 在单个 Spark 应用程序中(但假设您在 Spark SQL 应用程序中至少且通常只有一个 SparkSession)。

另请注意,Dataset绑定(bind)到 SparkSession它是在 SparkSession 内创建的永远不会改变。

你可能想知道为什么有人会想要它,但这给了你查询之间的界限,你可以为不同的数据集使用相同的表名,这实际上是 Spark SQL 的一个非常强大的特性。

以下示例显示了差异,希望能让您了解它为什么如此强大。

scala> spark.version
res0: String = 2.3.0-SNAPSHOT

scala> :type spark
org.apache.spark.sql.SparkSession

scala> spark.sql("show tables").show
+--------+---------+-----------+
|database|tableName|isTemporary|
+--------+---------+-----------+
+--------+---------+-----------+

scala> val df = spark.range(5)
df: org.apache.spark.sql.Dataset[Long] = [id: bigint]

scala> df.sqlContext.sql("show tables").show
+--------+---------+-----------+
|database|tableName|isTemporary|
+--------+---------+-----------+
+--------+---------+-----------+

scala> val anotherSession = spark.newSession
anotherSession: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@195c5803

scala> anotherSession.range(10).createOrReplaceTempView("new_table")

scala> anotherSession.sql("show tables").show
+--------+---------+-----------+
|database|tableName|isTemporary|
+--------+---------+-----------+
| |new_table| true|
+--------+---------+-----------+


scala> df.sqlContext.sql("show tables").show
+--------+---------+-----------+
|database|tableName|isTemporary|
+--------+---------+-----------+
+--------+---------+-----------+

关于apache-spark - SparkSession.sql 和 Dataset.sqlContext.sql 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47691309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com