尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
SparkSQL 之 JDBC 数据转 DataSet 代码实现
摘要JDBC 是连接传统关系型数据库的桥梁。本文从 JDBC 读取三模式整表/数值分区/自定义Predicate、并行分区原理、谓词/列裁剪下推、批量写入、连接池管理、以及四大常见坑六个维度配合 2 张架构图 完整代码实例覆盖 JDBC 操作的全部实践要点。关键词spark.read.jdbc, JDBC, partitionColumn, numPartitions, Predicate Pushdown, batchsize一、开篇Spark 通过 JDBC 连接所有标准 JDBC 兼容数据库核心 API 就是spark.read.jdbc()。valpropsnewjava.util.Properties()props.setProperty(user,root)props.setProperty(password,123456)props.setProperty(driver,com.mysql.cj.jdbc.Driver)valurljdbc:mysql://host:3306/dbvaldfspark.read.jdbc(url,users,props)二、JDBC 读取全流程2.1 三种读取入口// 方式 1: spark.read.jdbcvaldfspark.read.jdbc(url,users,props)// 方式 2: format(jdbc).options()valdfspark.read.format(jdbc).option(...).load()// 方式 3: 子查询valdfspark.read.jdbc(url,(SELECT id,name FROM users WHERE status1) AS u,props)2.2 并行分区读取// 数值列等分区间valdfspark.read.format(jdbc).option(partitionColumn,id).option(lowerBound,1).option(upperBound,10000000).option(numPartitions,20).load()// → 20 个 Task每个执行一个 WHERE id BETWEEN ... AND ...// 自定义 Predicate 列表valpredicatesArray(gender M,gender F)valdfspark.read.jdbc(url,users,predicates,props)2.3 DataFrame → Dataset[CaseClass]caseclassUser(id:Long,name:String,age:Int)valds:Dataset[User]spark.read.jdbc(url,users,props).as[User]三、连接管理 完整代码模式3.1 谓词/列裁剪下推spark.read.jdbc(url,users,props).filter(age 30).select(id,name,age)// → SQL: SELECT id, name, age FROM users WHERE age 303.2 批量写回df.write.mode(append).option(batchsize,5000).option(isolationLevel,READ_UNCOMMITTED).jdbc(url,target_table,props)四、四大常见坑① 连接数爆炸: numPartitions × executors 个连接 → DB max_connections 必须足够 ② 数据倾斜: 分区列值分布不均 → 长尾 Task → 用自定义 Predicate 解决 ③ 全量拉取: 未加 filter → 全表扫描 → 读时用 query 限定范围 ④ batchsize 太小: 默认 1000 → 增量到 5000~10000 显著提速五、总结三种读取模式整表/subquery 数值列分区 自定义 Predicate。推荐用分区并行读。优化要点谓词/列裁剪下推 numPartitions ≤ 20 batchsize5000~10000。避坑控制连接数、避免分区倾斜、查询加 WHERE 限制。作者starzy博客blog.starzy.cnGitHubstarzy1990.github.io专注 AI Agent · LangGraph · RAG · 大数据架构 · 数据工程实践
RELATED

相关推荐

暗黑2存档编辑器 d2s-editor 手把手指南:三分钟本地搭好环境,旧档读取、一键毕业、批量导装备一条龙

暗黑2存档编辑器 d2s-editor 手把手指南:三分钟本地搭好环境,旧档读取、一键毕业、批量导装备一条龙

暗黑2存档编辑器 d2s-editor 手把手指南:三分钟本地搭好环境,旧档读取、一键毕业、批量导装备一条龙 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 换电脑后翻出当年的暗黑2存档,新版本却不认…

📅 2026/9/18 12:54:31
Magnet2Torrent终极指南:如何把磁力链接快速转换为可永久保存的种子文件

Magnet2Torrent终极指南:如何把磁力链接快速转换为可永久保存的种子文件

Magnet2Torrent终极指南:如何把磁力链接快速转换为可永久保存的种子文件 【免费下载链接】Magnet2Torrent This will convert a magnet link into a .torrent file 项目地址: https://gitcode.com/gh_mirrors/ma/Magnet2Torrent 你收藏的磁力链接&#xff0c…

📅 2026/9/18 3:49:19
层论规划:构建韧性多智能体系统的范畴论基础

层论规划:构建韧性多智能体系统的范畴论基础

1. 项目概述:从“脆弱”到“韧性”的范式转移如果你在构建或研究多智能体自主系统,比如一群协作的无人机、一个自动驾驶车队,或者一个由多个AI模型协同工作的复杂服务框架,那么你一定遇到过这样的困境:系统在理想环境下…

📅 2026/9/19 17:50:45
MORE NEWS

更多资讯

📰

机器学习房价预测系统实战:从数据清洗到模型部署

简介:基于机器学习的房价预测系统完整源码包,主要面向计算机相关专业学生、入门数据科学学习者,以及房地产评估与金融风控领域的技术人员。项目围绕房价预测这一典型回归任务展开,涵盖数据预处理(异常值处理、缺失值填…

📰

AI芯片软硬件协同设计:从Roofline模型到算子融合的实战指南

做AI芯片这个方向的人应该都有类似的瞬间:拿到一片标称算力很高的AI加速芯片,把真实网络接上去一跑,端到端吞吐连理论峰值的三成都不到。按设计文档看,仿真明明挺好看,为什么一落到真实系统就掉链子?等到一…

📰

基于深度学习的水果识别系统毕设:从CNN模型训练到Flask推理接口全流程

简介:这份资源是面向计算机相关专业在校学生、高校教师及初级程序员的Python深度学习水果识别系统完整项目包,可直接用于毕业设计、课程设计或学科竞赛作业。项目以深度学习图像分类为核心,包含从数据标注到模型训练再到界面展示的完整流程&a…

📰

AI Coding Agents 的“生产级技能包”:agent-skills 完全指南与 TaoToken 统一接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

图像去噪数据合成新范式:CycleISP双向映射与真实噪声建模

1. 为什么“造数据”才是图像去噪的胜负手搞图像去噪这些年,我越来越确信一件事:决定一个去噪模型上限的,往往不是网络结构,而是训练数据是怎么造出来的。你拿一堆干净图加高斯白噪声去训,模型在合成测试集上跑分漂亮得…

📰

Linux目录树与文件管理实战:从根目录到权限与查找命令

很多人刚接触 Linux 的时候,第一个感受往往是“我这台电脑的文件到底放在哪里?”和 Windows 的 C 盘 D 盘不一样,Linux 一切从根目录/开始,没有盘符的概念,目录树直接裸露在你面前。这篇文章我围绕 Linux 系统基础操作…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬