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虚拟环境项目实例
Nov 20 Python
Pandas标记删除重复记录的方法
Apr 08 Python
在python中安装basemap的教程
Sep 20 Python
python创建与遍历List二维列表的方法
Aug 16 Python
详解Python3定时器任务代码
Sep 23 Python
python 用户交互输入input的4种用法详解
Sep 24 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
Python中filter与lambda的结合使用详解
Dec 24 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Python3+Appium安装及Appium模拟微信登录方法详解
Feb 16 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
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
sae使用smarty模板的方法
2013/12/17 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
php格式文件打开的四种方法
2018/02/24 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
python网络编程实例简析
2014/09/26 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
django 消息框架 message使用详解
2019/07/22 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
质检部经理岗位职责
2014/02/19 职场文书
护理中职生求职信范文
2014/02/24 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
2014年电教工作总结
2014/12/19 职场文书
早安问候语大全
2015/11/10 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
pycharm无法安装cv2模块问题
2022/05/20 Python