oracle - 使用 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()
解决方案
一般来说,实际的数据移动是最耗时的,应该避免。因此,作为一般规则,您希望在将数据移动到 Spark 环境之前尽可能多地在 JDBC 源(在您的情况下为 Oracle)中进行过滤。
一旦你准备好在 Spark 中进行一些分析,你可以持久化(缓存)结果,以避免每次都从 Oracle 重新检索。
话虽如此,@shrey-jakhmola 是对的,您想针对您的特定情况进行基准测试。甲骨文环境是否以某种方式窒息,也许?
推荐阅读
- java - java.lang.IllegalStateException:Java 分配的扫描仪关闭错误
- javascript - 在 JavaScript 中查找两个字符串之间的差异
- python-3.x - 在 python 中将容器(列表/字典)传递给函数会有什么不同?
- arkit - ARKit3 - Apple 官方示例无法编译,USDZ 3D 网格/骨架模型存在缺陷
- vue.js - SSR 版本为使用 Vue cli3 库的 Vuejs cli3 SPA 应用程序说“未定义文档”
- angularjs - Python烧瓶和AngularJS与链接http post请求顺序
- python - 在 python 中压缩和过滤
- angular - 在 Angular 中设置全球时区
- javascript - 防止鼠标第四个和第五个按钮在浏览器历史记录中向后/向前导航?
- numpy - numpy 和 mathdotnet.com 之间的移动平均差异