PySpark读取Mysql数据到DataFrame!

Spark版本:2.1
Python版本:2.7.12

了解了Spark RDD之后,小编今天有体验了一把Spark SQL,使用Spark SQL时,最主要的两个组件就是DataFrame和SQLContext。

1、引言

使用过Pandas的小伙伴们一定对DataFrame比较熟悉,Spark中的DataFrame其实跟pandas中的类似,DataFrame是一个分布式的,按照命名列的形式组织的数据集合。DataFrame基于R语言中的data frame概念,与关系型数据库中的数据库表类似。可以通过如下数据源创建DataFrame:

已有的RDD
结构化数据文件
JSON数据集
Hive表
外部数据库

今天,小编只想带大家如何从外部的mysql数据库中获取数据:加入我有一个test的数据库存在于本地,有一个名为chat的数据表,其中的数据是这样的:

《PySpark读取Mysql数据到DataFrame!》 chat数据表.png

可以看到主要有四列数据,分别是id,问题,回答以及问题对应的词向量(经过word2vec训练出来的)。

想要通过SparkSql获取到数据库的数据,小编可真是费了很大的力气,网上的帖子真可谓少之又少,不过经过一番试错,小编最终还是搞定啦,哈哈。

2、环境配置

想要了解spark安装的童鞋,可以参考我之前写的文章:http://www.jianshu.com/p/c248b8c966e2
想要spark能够从mysql中获取数据,我们首先需要一个连接mysql的jar包,jar包下载地址:http://download.csdn.net/download/u012453843/9667329
将jar包放入虚拟机中合适的位置,比如我放置在/home/sxw/Documents路径下,并在spark的 spark-env.sh 文件中加入:

export SPARK_CLASSPATH=/home/sxw/Documents/mysql-connector-java-5.1.40-bin.jar

3、代码编写

使用pyspark并从mysql中获取数据的完整代码如下:

from pyspark.sql import SparkSession
from pyspark.sql import SQLContext

sc = SparkSession.builder.appName("Python Spark SQL basic example")\
    .config('spark.some.config,option0','some-value')\
    .getOrCreate()
ctx = SQLContext(sc)
jdbcDf=ctx.read.format("jdbc").options(url="jdbc:mysql://localhost:3306/test",
                                       driver="com.mysql.jdbc.Driver",
                                       dbtable="(SELECT * FROM chat) tmp",user="root",
                                       password="0845").load()
print(jdbcDf.printSchema())

小编还没有仔细研究SparkSQL的语法,所以这里对于语句就不做过多的介绍啦。

4、运行

我们把上面的代码保存成test.py,直接使用python test.py命令运行,结果如下:

《PySpark读取Mysql数据到DataFrame!》 运行结果1.png

可以看到,我们成功从mysql中得到了数据,并打印出了DataFrame的Schema。

如果你喜欢我写的文章,可以帮忙给小编点个赞或者加个关注,我一定会互粉的!
如果大家对spark感兴趣,欢迎跟小编进行交流,小编微信为sxw2251,加我要写好备注哟!

《PySpark读取Mysql数据到DataFrame!》 我的微信

    原文作者:石晓文的学习日记
    原文地址: https://www.jianshu.com/p/0de7afe83452
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞