首页 > 解决方案 > 使用 jdbc 执行 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()

标签: oraclescalaperformancedataframeapache-spark

解决方案


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

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

话虽如此,@shrey-jakhmola 是对的,您想针对您的特定情况进行基准测试。甲骨文环境是否以某种方式窒息,也许?


推荐阅读