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 相关文章推荐
python3中str(字符串)的使用教程
Mar 23 Python
python中如何使用朴素贝叶斯算法
Apr 06 Python
python中通过预先编译正则表达式提高效率
Sep 25 Python
PyCharm代码提示忽略大小写设置方法
Oct 28 Python
python里运用私有属性和方法总结
Jul 08 Python
django的csrf实现过程详解
Jul 26 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
Nov 11 Python
python写一个随机点名软件的实例
Nov 28 Python
Python 实现opencv所使用的图片格式与 base64 转换
Jan 09 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
解决Python 函数声明先后顺序出现的问题
Sep 02 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
php中simplexml_load_string使用实例分享
2014/02/13 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
javascript第一课
2007/02/27 Javascript
javascript 获取网页参数系统
2008/07/19 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
Three.js基础学习教程
2017/11/16 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
python中pip的安装与使用教程
2018/08/10 Python
python实现简单名片管理系统
2018/11/30 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
总经理司机职责
2014/02/02 职场文书
优秀教师工作感言
2014/02/16 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
团队拓展活动方案
2014/08/28 职场文书
教师个人事迹材料
2014/12/17 职场文书
销售工作决心书
2015/02/04 职场文书
2015年外联部工作总结
2015/04/03 职场文书
教师旷工检讨书
2015/08/15 职场文书