在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()
答案 0 :(得分:1)
通常,实际数据移动是最耗时的,应该避免。因此,作为一般规则,在将数据移入Spark环境之前,您希望在JDBC源(在您的情况下为Oracle)中尽可能多地进行过滤。
一旦准备好在Spark中进行一些分析,就可以保留(缓存)结果,从而避免每次都从Oracle重新检索。
话虽这么说,@ shrey-jakhmola是正确的,您想针对您的特定情况进行基准测试。也许Oracle环境因某种原因而被阻塞了吗?