我正在尝试使用sparklyr
包连接到现有的MS SQL数据库,以便比使用RODBC
包更快地查询数据。目前,我可以使用RODBC::odbcConnect()
和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()
查询SQL数据库中的相应表。
我知道有一种方法可以在spark中使用SQL查询,以获得所需的spark表输出。我的问题是,是否有一种方法可以激活可以直接查询数据库的本地火花簇,并希望加快更大查询的等待时间。