Spark 是不是支持从句?
Posted
技术标签:
【中文标题】Spark 是不是支持从句?【英文标题】:Does Spark Supports With Clause?Spark 是否支持从句? 【发布时间】:2017-05-15 12:34:36 【问题描述】:我在 spark 中有表 employee_1
具有属性 id 和名称(带有数据),还有另一个表 employee_2
具有相同的属性,我想通过增加 id 值来加载数据 +1
My With 子句如下所示:
WITH EXP AS (SELECT ALIASNAME.ID+1 ID, ALIASNAME.NAME NAME FROM employee_1 ALIASNAME)
INSERT INTO TABLE employee_2 SELECT * FROM EXP;
执行步骤:
我在 HDFS 位置有一个文件(包含数据)。
-
根据 hdfs 位置创建 RDD。
RDD 到 Hive 临时表
从临时表到 Hive 目标 (employee_2)。
当我从后端运行测试程序时,它会成功。但数据未加载。 employee_2
为空。
注意: 如果您在 Hive 中运行上述 with 子句,它将成功并加载数据。但在 spark 中它不会在 1.6 中?
【问题讨论】:
在 Spark 2.x 上它绝对支持 WITH 语句。我可以尝试清理旧的 1.6 来为您验证,但基本上它看起来应该可以运行 谢谢,在 sparksql 上下文中使用了 1.6、2.x 版本。 【参考方案1】:WITH 语句不是问题,而是 INSERT INTO 语句引起了问题。
这是一个使用 .insertInto() 样式而不是“INSERT INTO”SQL 的工作示例:
val s = Seq((1,"foo"), (2, "bar"))
s: Seq[(Int, String)] = List((1,foo), (2,bar))
val df = s.toDF("id", "name")
df.registerTempTable("df")
sql("CREATE TABLE edf_final (id int, name string)")
val e = sql("WITH edf AS (SELECT id+1, name FROM df cook) SELECT * FROM edf")
e.insertInto("edf_final")
另一种选择是使用df.write.mode("append").saveAsTable("edf_final")
样式。
相关SO:"INSERT INTO ..." with SparkSQL HiveContext
【讨论】:
以上是关于Spark 是不是支持从句?的主要内容,如果未能解决你的问题,请参考以下文章
Spark 2.2.0 是不是支持 Streaming Self-Join?
Spark 是不是支持使用 Parquet 文件进行分区修剪
spark-cassandra-connector 是不是支持内置负载均衡?
Spark-SQL 是不是支持使用 regex 规范的 Hive Select All Query with except Columns