我在data.sql文件中存储了一个长sql查询。我想在scala代码中执行这个文件。对于sqlquery字符串,我使用spark.sql(sqlquery)来执行sql。但是对于.sql文件,我应该如何执行它?非常感谢你!
lqfhib0f1#
你可以试试这个流程( Spark 1.6.2, Scala 2.10.5 )使用查询创建文件
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壳
HDFS
/hdfs/path/query.sql
/local/path/query.sql
$ 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
ozxc1zmp2#
你可以用 scala.io.Source :
scala.io.Source
import scala.io.Source val sqlQuery = Source.fromFile("path/to/data.sql").mkString //read file spark.sql(sqlQuery) //execute query
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。
3条答案
按热度按时间lqfhib0f1#
你可以试试这个流程(
Spark 1.6.2, Scala 2.10.5
)使用查询创建文件
如果你有
HDFS
,您可以将文件上载到HDFS
(说在/hdfs/path/query.sql
)如果你有它在本地,那么说它在/local/path/query.sql
磨合Spark壳(如果从本地加载)
(如果从
HDFS
)执行并查看结果
ozxc1zmp2#
你可以用
scala.io.Source
:2ledvvac3#
假设您有一个below.sql文件,该文件的数据如下所示,并用半列分隔(
;
).使用下面的代码,它将读取文件并将内容转换为字符串。然后它将用半列分割字符串,然后依次执行每个sql。