使用spark的 DataFrame 来操作mysql数据。

DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考:

https://spark.apache.org/docs/latest/sql-programming-guide.html

这里暂时使用spark-shell进行操作,

1.首先,必须要先下载一个mysql的jdbc的驱动

可以从这里下载

2.然后呢,就好办了。

#具体的启动spark-shell的方法(带上mysql的driver)
$~/spark-shell --driver-class-path /path-to-mysql-jar/mysql-connector-java-5.1.-bin.jar

#定义mysql的信息
val url="jdbc:mysql://10.181.176.226:3306/geo_info"
val prop = new java.util.Properties
prop.setProperty("user","geo")
prop.setProperty("password","xxxxxx”)

#指定读取条件,这里 Array("country_code='CN'") 是where过滤条件
val cnFlight = sqlContext.read.jdbc(url,"gps_location",Array("country_code='CN'"),prop)

#然后进行groupby 操作,获取数据集合
val emailList = cnFlight.groupBy("gps_city", "user_mail”)

#计算数目,并根据数目进行降序排序
val sorted = emailList.count().orderBy( desc("count") ) #显示前10条
sorted.show() #存储到文件(这里会有很多分片文件。。。)
sorted.rdd.saveAsTextFile("/home/qingpingzhang/data/flight_top”) #存储到mysql表里
sorted.write.jdbc(url,"table_name",prop)

3.具体文件编写代码,然后提交worker也类似,主要是DataFrame的 sqlContext声明会不一样。

val sc: SparkContext // An existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)

这里如果要用spark-submit,则会有坑,即便你是用sbt的assembly来打包的一个全的jar包:

参考:http://www.iteblog.com/archives/1300

[itelbog@iteblog ~]$  bin/spark-submit --master local[]     --driver-class-path lib/mysql-connector-java-5.1..jar    --class  spark.SparkToJDBC ./spark-test_2.-1.0.jar

在spark中操作mysql数据 ---- spark学习之七的更多相关文章

  1. ScalikeJDBC,操作mysql数据,API

    ScalikeJDBC,操作mysql数据,API 一.构建maven项目,添加pom.xml依赖 二.resource文件下创建application.conf文件,并配置以下内容 三.操作mysq ...

  2. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  3. (转)Python中操作mysql的pymysql模块详解

    原文:https://www.cnblogs.com/wt11/p/6141225.html https://shockerli.net/post/python3-pymysql/----Python ...

  4. openresty开发系列28--openresty中操作mysql

    openresty开发系列28--openresty中操作mysql Mysql客户端   应用中最常使用的就是数据库了,尤其mysql数据库,那openresty lua如何操作mysql呢?   ...

  5. Go中操作mysql

    Go中操作mysql 首先在mysql里的test数据库中创建数据表 CREATE TABLE `userinfo` ( `uid` INT(10) NOT NULL AUTO_INCREMENT, ...

  6. 解决spark中遇到的数据倾斜问题

    一. 数据倾斜的现象 多数task执行速度较快,少数task执行时间非常长,或者等待很长时间后提示你内存不足,执行失败. 二. 数据倾斜的原因 常见于各种shuffle操作,例如reduceByKey ...

  7. Dos中查看mysql数据时 中文乱码

    使用jsp页面查看数据时可以正确显示中文,但是dos窗口查看数据时中文显示乱码. 上网查了一下原因:之所以会显示乱码,就是因为MySQL客户端输出窗口显示中文时使用的字符编码不对造成的,可以使用如下的 ...

  8. docker 使用mysqldump命令备份导出项目中的mysql数据

    下图为镜像重命名后的镜像名为uoj,现在要把这个镜像中的mysql导出 运行如下命令: docker exec -it uoj mysqldump -uroot -proot app_uoj233 & ...

  9. python中操作mysql

    import pymysql # 连接数据库 connect = pymysql.Connect( host='localhost', port=3306, user='root', passwd=' ...

随机推荐

  1. urllib2.open(req).read() 报403的错误:怎么办?

    http://www.douban.com/group/topic/18095751/ heads = {'Accept':'text/html,application/xhtml+xml,appli ...

  2. winform中dataGridView高度自适应填充完数据的高度

    // winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度是根据数据的多少而变动. 在load的时候,数据绑定后,加上如下代码: ...

  3. Python paramiko 模块

    paramiko模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh ...

  4. mysql 联合索引(转)

    http://blog.csdn.net/lmh12506/article/details/8879916 mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中 ...

  5. 每天一个Linux命令

    每天一个Linux命令(1):ls命令 每天一个Linux命令(2):cd命令 每天一个Linux命令(3):pwd命令 每天一个 Linux 命令(4):mkdir 每天一个 Linux 命令(5) ...

  6. 有效Email

    !/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test($.trim($('#account').val()))

  7. mac 下 chrome 语言环境 设置

    当然,如果把系统语言更改为英文,Chrome.QQ 等一系列软件会自动变成英文界面,而且没有提供切换语言的设置. 啪了下 Google,找到了方法,直接在终端运行后重启 Chrome 即可更改. 英文 ...

  8. PIC32MZ tutorial -- Change Notification

    In my last post I implement "Key Debounce" with port polling, port polling is not very eff ...

  9. JS动态获取数据

    JS访问数据,有实时获取数据的时候,请加上时间戳 如:'&stampflag=' + Math.round(new Date().getTime() / 1000); 因为有的浏览器(如IE9 ...

  10. HashSet中的元素必须重写equals方法和hashCode方法

    http://jingyan.baidu.com/article/d5a880eb8fb61d13f147cc99.html 1.为什么必须重写这两个方法. 2.什么事hashSet去重,符合什么样的 ...