今天准备将mysql的数据倒腾到RDD,很早以前就知道有一个JdbcRDD,就想着使用一下,结果发现却是鸡肋一个。

首先,看看JdbcRDD的定义:

* An RDD that executes an SQL query on a JDBC connection and reads results.

* For usage example, see test case JdbcRDDSuite.

*

* @param getConnection a function that returns an open Connection.

* The RDD takes care of closing the connection.

* @param sql the text of the query.

* The query must contain two ? placeholders for parameters used to partition the results.

* E.g. "select title, author from books where ? <= id and id <= ?"

* @param lowerBound the minimum value of the first placeholder

* @param upperBound the maximum value of the second placeholder

* The lower and upper bounds are inclusive.

* @param numPartitions the number of partitions.

* Given a lowerBound of 1, an upperBound of 20, and a numPartitions of 2,

* the query would be executed twice, once with (1, 10) and once with (11, 20)

* @param mapRow a function from a ResultSet to a single row of the desired result type(s).

* This should only call getInt, getString, etc; the RDD takes care of calling next.

* The default maps a ResultSet to an array of Object.

*/

class JdbcRDD[T: ClassTag](

sc: SparkContext,

getConnection: () => Connection,

sql: String,

lowerBound: Long,

upperBound: Long,

numPartitions: Int,

mapRow: (ResultSet) => T = JdbcRDD.resultSetToObjectArray _)

附上个例子:

package test

import java.sql.{Connection, DriverManager, ResultSet}

import org.apache.spark.rdd.JdbcRDD

import org.apache.spark.{SparkConf, SparkContext}

object spark_mysql {

def main(args: Array[String]) {

//val conf = new SparkConf().setAppName("spark_mysql").setMaster("local")

val sc = new SparkContext("local","spark_mysql")

def createConnection() = {

Class.forName("com.mysql.jdbc.Driver").newInstance()

DriverManager.getConnection("jdbc:mysql://192.168.0.15:3306/wsmall", "root", "passwd")

}

def extractValues(r: ResultSet) = {

(r.getString(1), r.getString(2))

}

val data = new JdbcRDD(sc, createConnection, "SELECT id,aa FROM bbb where ? <= ID AND ID <= ?", lowerBound = 3, upperBound =5, numPartitions = 1, mapRow = extractValues)

println(data.collect().toList)

sc.stop()

}

}

使用的MySQL表的数据如下:

运行结果如下:

可以看出:JdbcRDD的

sql参数要带有两个?的占位符,而这两个占位符是给参数

lowerBound和参数

upperBound定义where语句的边界的,如果仅仅是这样的话,还可以接受;但悲催的是

参数

lowerBound和

参数

upperBound都是Long类型的,

,不知道现在作为关键字或做查询的字段有多少long类型呢?不过参照JdbcRDD的源代码,用户还是可以写出符合自己需求的JdbcRDD,这算是不幸中之大幸了。

最近一直忙于炼数成金的spark课程,没多少时间整理博客。特意给想深入了解spark的朋友推荐一位好友的博客

http://www.cnblogs.com/cenyuhai/ ,里面有不少源码博文,利于理解spark的内核。

java jdbcrdd_鸡肋的JdbcRDD相关推荐

  1. Spark与Mysql(JdbcRDD)整合开发

    在Spark中提供了一个JdbcRDD类,该RDD就是读取JDBC中的数据并转换成RDD,之后我们就可以对该RDD进行各种的操作.我们先看看该类的构造函数: JdbcRDD[T: ClassTag]( ...

  2. AJPFX讲解Java 性能优化[4]:关于 finalize 函数

    ★finalize 函数的调用机制 俺经常啰嗦:"了解本质机制的重要性".所以今天也得先谈谈 finalize 函数的调用机制.在聊之前,先声明一下:Java虚拟机规范(见&quo ...

  3. Spark-Core基础练习题30道

    Spark-Core练习题 1.创建一个1-10数组的RDD,将所有元素*2形成新的RDD val inputRDD = sc.parallelize(1 to 10) val newRDD = in ...

  4. spark Java oracle,spark2.x由浅入深深到底系列六之RDD java api用JdbcRDD读取关系型数据库...

    课程咨询以及领取大额优惠请加微信:bigdatatang01 以下是用spark RDD java api实现从关系型数据库中读取数据,这里使用的是derby本地数据库,当然可以是mysql或者ora ...

  5. 淘宝整点下单java实现(简单鸡肋)

    淘宝整点下单java实现(简单鸡肋) 一.下载chrome浏览器驱动 二.脚本配置和代码 三.用法步骤 一.下载chrome浏览器驱动 查看chrome浏览器版本和操作系统版本,下载相应驱动版本 ht ...

  6. java三国kill_蓝牙三国Kill:这算不算是鸡肋?

    其实三国杀官方开发的Java.Android.iOS的版本都早就发布了,那这款在与最近又特地从JAVA移植到Android平台的蓝牙三国Kill算不算是食之无味弃之可惜的鸡肋呢?看看就知道了. 平台: ...

  7. Java泛型真的是鸡肋吗?

    学习Java的同学注意了!!!  学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:286945438 我们一起学Java! 今天遇到一个小问题,让我感觉Java的泛型 ...

  8. 不少Java程序员都觉得Lambda表达式很鸡肋,它到底有何用呢?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:https://urlify.cn/B3uiI3 # 什么是 ...

  9. java 跨平台很鸡肋,Mac 篇八:Mac上的这个软件看起来很鸡肋,其实很牛很强大

    Mac 篇八:Mac上的这个软件看起来很鸡肋,其实很牛很强大 2019-11-26 11:37:36 8点赞 42收藏 1评论 用了很多年Mac,可能这个应用都没有注意到,看起来不起眼,其实用好它,不 ...

最新文章

  1. 【腾讯面试题】熊出没
  2. 大型分布式C++框架《四:netio之请求包中转站 上》
  3. ubuntu修改mongodb的数据库储存位置
  4. php libxml 宝塔,宝塔编译安装各个版本php无法安装
  5. TIOBE 10月编程语言排行榜 : GO 问鼎本年度语言 ?
  6. SpringBoot2.1.5(18)--- 国际化配置,SpringBoot Locale 国际化使用方法
  7. Go 存储基础 — 内存结构体怎么写入文件?
  8. 技术大佬:我去,你写的 switch 语句也太老土了吧!
  9. 改善代码质量的编程规范
  10. 抓包工具之fiddler
  11. 入门OJ 1256【排队】
  12. 比较两个文本差异,直接显示两个文本的相同点与不同点
  13. Android涂鸦简单制作
  14. stm32不使用外部晶振管脚怎么处理_stm32103如果不用32k晶振,那引脚是悬空还是接地?...
  15. JavaEE实现微博项目(含注册、登录、发表微博、评论微博、关注博主、阅读排行榜、评论排行榜等功能)
  16. MySQL系列----创建函数
  17. nba全明星java_2018nba全明星阵容
  18. 非侵入性脑刺激和太空探索
  19. 公司出路:与速达ERP合作设想
  20. 给vscode设置背景图片~~贼好用

热门文章

  1. 为什么要做微信小程序
  2. 用php做论坛头像代码,详细介绍PHP针对多用户实现头像更换代码示例
  3. mysql root用户不存在_MySQL – 解决root用户下仍然出现权限问题-无法建库
  4. 研招网显示服务器错误,研招网2019考研调剂系统常见问题(一)
  5. Odoo与浪潮合资研发PS Cloud之如何使用产品变体
  6. firemonkey开发app(手势gesture)
  7. 4-TDengine图形化管理工具TDengineGUI与IDEA插件
  8. unturned最新版怎么创建服务器,unturned自己建立服务器大厅方法指引
  9. 有没有软件自动测试安装软件,驱动检测安装工具
  10. Redis 源码分析-数据结构及实现(字典dict)