pyspark对Mysql数据库进行读写的实现


Posted in Python onDecember 30, 2020

pyspark是Spark对Python的api接口,可以在Python环境中通过调用pyspark模块来操作spark,完成大数据框架下的数据分析与挖掘。其中,数据的读写是基础操作,pyspark的子模块pyspark.sql 可以完成大部分类型的数据读写。文本介绍在pyspark中读写Mysql数据库。

1 软件版本

在Python中使用Spark,需要安装配置Spark,这里跳过配置的过程,给出运行环境和相关程序版本信息。

  • win10 64bit
  • java 13.0.1
  • spark 3.0
  • python 3.8
  • pyspark 3.0
  • pycharm 2019.3.4

2 环境配置

pyspark连接Mysql是通过java实现的,所以需要下载连接Mysql的jar包。

下载地址

pyspark对Mysql数据库进行读写的实现

选择下载Connector/J,然后选择操作系统为Platform Independent,下载压缩包到本地。

pyspark对Mysql数据库进行读写的实现

然后解压文件,将其中的jar包mysql-connector-java-8.0.19.jar放入spark的安装目录下,例如D:\spark\spark-3.0.0-preview2-bin-hadoop2.7\jars

pyspark对Mysql数据库进行读写的实现

环境配置完成!

3 读取Mysql

脚本如下:

from pyspark.sql import SQLContext, SparkSession

if __name__ == '__main__':
  # spark 初始化
  spark = SparkSession. \
    Builder(). \
    appName('sql'). \
    master('local'). \
    getOrCreate()
  # mysql 配置(需要修改)
  prop = {'user': 'xxx', 
      'password': 'xxx', 
      'driver': 'com.mysql.cj.jdbc.Driver'}
  # database 地址(需要修改)
  url = 'jdbc:mysql://host:port/database'
  # 读取表
  data = spark.read.jdbc(url=url, table='tb_newCity', properties=prop)
  # 打印data数据类型
  print(type(data))
  # 展示数据
  data.show()
  # 关闭spark会话
  spark.stop()
  • 注意点:
  • prop参数需要根据实际情况修改,文中用户名和密码用xxx代替了,driver参数也可以不需要;
  • url参数需要根据实际情况修改,格式为jdbc:mysql://主机:端口/数据库
  • 通过调用方法read.jdbc进行读取,返回的数据类型为spark DataFrame;

运行脚本,输出如下:

pyspark对Mysql数据库进行读写的实现

4 写入Mysql

脚本如下:

import pandas as pd
from pyspark import SparkContext
from pyspark.sql import SQLContext, Row

if __name__ == '__main__':
  # spark 初始化
  sc = SparkContext(master='local', appName='sql')
  spark = SQLContext(sc)
  # mysql 配置(需要修改)
  prop = {'user': 'xxx',
      'password': 'xxx',
      'driver': 'com.mysql.cj.jdbc.Driver'}
  # database 地址(需要修改)
  url = 'jdbc:mysql://host:port/database'

  # 创建spark DataFrame
  # 方式1:list转spark DataFrame
  l = [(1, 12), (2, 22)]
  # 创建并指定列名
  list_df = spark.createDataFrame(l, schema=['id', 'value']) 
  
  # 方式2:rdd转spark DataFrame
  rdd = sc.parallelize(l) # rdd
  col_names = Row('id', 'value') # 列名
  tmp = rdd.map(lambda x: col_names(*x)) # 设置列名
  rdd_df = spark.createDataFrame(tmp) 
  
  # 方式3:pandas dataFrame 转spark DataFrame
  df = pd.DataFrame({'id': [1, 2], 'value': [12, 22]})
  pd_df = spark.createDataFrame(df)

  # 写入数据库
  pd_df.write.jdbc(url=url, table='new', mode='append', properties=prop)
  # 关闭spark会话
  sc.stop()

注意点:

propurl参数同样需要根据实际情况修改;

写入数据库要求的对象类型是spark DataFrame,提供了三种常见数据类型转spark DataFrame的方法;

通过调用write.jdbc方法进行写入,其中的model参数控制写入数据的行为。

model 参数解释
error 默认值,原表存在则报错
ignore 原表存在,不报错且不写入数据
append 新数据在原表行末追加
overwrite 覆盖原表

5 常见报错

Access denied for user …

pyspark对Mysql数据库进行读写的实现

原因:mysql配置参数出错
解决办法:检查user,password拼写,检查账号密码是否正确,用其他工具测试mysql是否能正常连接,做对比检查。

No suitable driver

pyspark对Mysql数据库进行读写的实现

原因:没有配置运行环境
解决办法:下载jar包进行配置,具体过程参考本文的2 环境配置

到此这篇关于pyspark对Mysql数据库进行读写的实现的文章就介绍到这了,更多相关pyspark Mysql读写内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python字符串详细介绍
May 09 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
linux环境中没有网络怎么下载python
Jul 07 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
Jupyter Notebook输出矢量图实例
Apr 14 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
python编写扎金花小程序的实例代码
Feb 23 Python
Python经常使用的一些内置函数
Apr 11 Python
python实现无边框进度条的实例代码
Dec 30 #Python
python中的列表和元组区别分析
Dec 30 #Python
python实现xml转json文件的示例代码
Dec 30 #Python
python实现KNN近邻算法
Dec 30 #Python
python 实现逻辑回归
Dec 30 #Python
Python 随机按键模拟2小时
Dec 30 #Python
Python的scikit-image模块实例讲解
Dec 30 #Python
You might like
正则表达式语法
2006/10/09 Javascript
php实现的仿阿里巴巴实现同类产品翻页
2009/12/11 PHP
php eval函数用法总结
2012/10/31 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
jquery.lazyload  实现图片延迟加载jquery插件
2010/02/06 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
js replace正则表达式应用案例讲解
2013/01/17 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
js操作二进制数据方法
2018/03/03 Javascript
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
python 检查文件mime类型的方法
2018/12/08 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
金融专业大学生自我评价
2014/01/09 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
本溪关门山导游词
2015/02/09 职场文书
电影圆明园观后感
2015/06/03 职场文书
法律讲堂观后感
2015/06/11 职场文书
物业管理交接协议书
2016/03/24 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
python删除csv文件的行列
2021/04/06 Python