执行多个火花查询并存储为数据框
Posted
技术标签:
【中文标题】执行多个火花查询并存储为数据框【英文标题】:Executing multiple spark queries and storing as dataframe 【发布时间】:2018-03-11 06:55:09 【问题描述】:我在 List - sqlQueries 中保存了 3 个 Spark 查询。其中前两个创建全局临时视图,第三个在这些临时视图上执行并获取一些输出。 我可以使用它运行单个查询 -
val resultDF = spark.sql(sql)
然后我在这个数据框对象上添加分区信息并保存它。 如果有多个查询,我尝试执行
sqlQueries.foreach(query => spark.sql(query))
如何保存第三个查询的输出以保持其他 2 个查询运行。 例如,我有 3 个查询,它可以是任何数字。
【问题讨论】:
没有***.com/a/49213255/5880706 帮助你吗? 这有助于获取查询。我该如何保存?基本上,如果我保存最终输出,我如何确保查询在此之前运行。 【参考方案1】:您可以将最后一个查询编写为插入语句以将结果保存到表中。您正在通过 foreach 执行查询,这些查询将按顺序执行。
【讨论】:
【参考方案2】:我从您的other question 中引用了需要修改的查询,如 sql 部分中的global-temporary-view 中所述。
修改后你的查询文件应该是这样的
CREATE GLOBAL TEMPORARY VIEW VIEW_1 AS select a,b from abc
CREATE GLOBAL TEMPORARY VIEW VIEW_2 AS select a,b from global_temp.VIEW_1
select * from global_temp.VIEW_2
然后回答这个问题:您可以再次使用foldLeft
来反映多个查询。
假设你有一个dataframe
+----+---+---+
|a |b |c |
+----+---+---+
|a |b |1 |
|adfs|df |2 |
+----+---+---+
并且给定上面的多行查询文件,你可以做如下操作
df.createOrReplaceTempView("abc")
val sqlFile = "path to test.sql"
val queryList = scala.io.Source.fromFile(sqlFile).getLines().filterNot(_.isEmpty).toList
val finalresult = queryList.foldLeft(df)((tempdf, query) => sqlContext.sql(query))
finalresult.show(false)
这应该给你
+----+---+
|a |b |
+----+---+
|a |b |
|adfs|df |
+----+---+
【讨论】:
以上是关于执行多个火花查询并存储为数据框的主要内容,如果未能解决你的问题,请参考以下文章