0

我正在尝试使用该sparklyr程序包连接到现有的 MS SQL 数据库,以比使用该RODBC程序包更快地查询数据。目前,我能够使用RODBC::odbcConnect()and成功查询数据库RODBC::sqlQuery()。对于大多数用途来说,这很好用,但是,我正在查询的数据库之一存储了大量的数据,当我的查询接近一百万行时,它可能需要很长时间。

例如,当我使用我编写的包装函数查询 40 个可能的站点之一时read_sql,从今年年初 ( 2017-01-01) 到今天 ( 2017-05-01),结果数据框中大约有 800,000 行和 7 列。该函数运行大约需要 30 秒。

> system.time(read_sql(site = list("1"), start_date = "2017-01-01", end_date = Sys.time()))
   user  system elapsed 
  19.25    0.41   33.07 

如果我添加第二个站点,则几乎需要两倍的时间,因为行数也翻了一番,达到大约 160 万:

> system.time(read_sql(site = list("1", "2"), start_date = "2017-01-01", end_date = Sys.time()))
   user  system elapsed 
  37.51    1.03   57.92

read_sql()函数本质上只是将输入转换为适当的字符串,以使用RODBC::sqlQuery().

我知道有一种方法可以在 spark 中使用 SQL 查询以获得所需的 spark 表输出。我的问题是是否有一种方法可以激活可以直接查询数据库的本地 spark 集群,并有望加快更大查询的等待时间。

4

0 回答 0