如何将.sql文件加载到scala?

omtl5h9j  于 2021-06-26  发布在  Hive
关注(0)|答案(3)|浏览(290)

我在data.sql文件中存储了一个长sql查询。我想在scala代码中执行这个文件。对于sqlquery字符串,我使用spark.sql(sqlquery)来执行sql。但是对于.sql文件,我应该如何执行它?
非常感谢你!

lqfhib0f

lqfhib0f1#

你可以试试这个流程( Spark 1.6.2, Scala 2.10.5 )
使用查询创建文件

$ cat query.sql
select * from mydb.mytable

如果你有 HDFS ,您可以将文件上载到 HDFS (说在 /hdfs/path/query.sql )如果你有它在本地,那么说它在 /local/path/query.sql 磨合Spark壳

$ spark-shell
:
:
Created sql context (with Hive support)..
SQL context available as sqlContext.

(如果从本地加载)

scala> val myQueryFile = sc.textFile("file:///local/path/query.sql")

(如果从 HDFS )

scala> val myQueryFile = sc.textFile("/hdfs/path/query.sql")

执行并查看结果

scala> val myQuery = myQueryFile.take(1)
scala> val myResultDf = sqlContext.sql(myQuery(0))
scala> myResultDf.show
ozxc1zmp

ozxc1zmp2#

你可以用 scala.io.Source :

import scala.io.Source

val sqlQuery = Source.fromFile("path/to/data.sql").mkString //read file
spark.sql(sqlQuery) //execute query
2ledvvac

2ledvvac3#

假设您有一个below.sql文件,该文件的数据如下所示,并用半列分隔( ; ).

create table table1(id int, name string);
create table table2(id int, login_time timestamp, logout_time timestamp)

使用下面的代码,它将读取文件并将内容转换为字符串。然后它将用半列分割字符串,然后依次执行每个sql。

sc.textFile("/data.sql").collect().mkString.split(";").foreach(qry => spark.sql(qry))
``` `sc` 手段 `sparkContext` . 这将创建到集群的连接。您不需要定义这个变量,您可以使用 `sc.textFile` 直接。同样地 `spark` 是spark会话变量。您不需要定义这个,您可以直接使用 `spark.sql` 执行sqls。

相关问题