我有一个很长的 SQL 查询存储在 data.sql 文件中。我想在我的 Scala 代码中执行这个文件。使用 sqlQuery 字符串,我使用 spark.sql(sqlQuery) 来执行 sql。但是对于 .sql 文件,我应该如何执行它?
非常感谢!
你可以试试这个流程 ( Spark 1.6.2, Scala 2.10.5)
使用查询创建文件
$ cat query.sql
select * from mydb.mytable
Run Code Online (Sandbox Code Playgroud)
如果你有HDFS,你可以上传文件到HDFS(比如在/hdfs/path/query.sql)如果你在本地有,那就说它在/local/path/query.sql
在火花壳中运行
$ spark-shell
:
:
Created sql context (with Hive support)..
SQL context available as sqlContext.
Run Code Online (Sandbox Code Playgroud)
(如果从本地加载)
scala> val myQueryFile = sc.textFile("file:///local/path/query.sql")
Run Code Online (Sandbox Code Playgroud)
(如果从 加载HDFS)
scala> val myQueryFile = sc.textFile("/hdfs/path/query.sql")
Run Code Online (Sandbox Code Playgroud)
执行并查看结果
scala> val myQuery = myQueryFile.take(1)
scala> val myResultDf = sqlContext.sql(myQuery(0))
scala> myResultDf.show
Run Code Online (Sandbox Code Playgroud)
您可以简单地使用scala.io.Source:
import scala.io.Source
val sqlQuery = Source.fromFile("path/to/data.sql").mkString //read file
spark.sql(sqlQuery) //execute query
Run Code Online (Sandbox Code Playgroud)