使用JDBC执行火花

时间:2020-09-17 14:22:23

标签: oracle scala performance dataframe apache-spark

在Spark数据框中,假设我按如下所示从oracle中获取数据。

查询将完全在oracle中发生吗?假设查询很大。那是甲骨文的开销吗?更好的方法是在单独的数据框中读取每个过滤的表数据,然后使用spark SQL或数据框将其联接,以便在Spark中进行完整联接吗?你能帮忙吗?

df = sqlContext.read.format('jdbc').options(
url="jdbc:mysql://foo.com:1111", 
dbtable="(SELECT * FROM abc,bcd.... where abc.id= bcd.id.....) AS table1",      user="test",
password="******", 
driver="com.mysql.jdbc.Driver").load()

1 个答案:

答案 0 :(得分:1)

通常,实际数据移动是最耗时的,应该避免。因此,作为一般规则,在将数据移入Spark环境之前,您希望在JDBC源(在您的情况下为Oracle)中尽可能多地进行过滤。

一旦准备好在Spark中进行一些分析,就可以保留(缓存)结果,从而避免每次都从Oracle重新检索。

话虽这么说,@ shrey-jakhmola是正确的,您想针对您的特定情况进行基准测试。也许Oracle环境因某种原因而被阻塞了吗?