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的数据表,其中的数据是这样的:
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命令运行,结果如下:
运行结果1.png
可以看到,我们成功从mysql中得到了数据,并打印出了DataFrame的Schema。
如果你喜欢我写的文章,可以帮忙给小编点个赞或者加个关注,我一定会互粉的!
如果大家对spark感兴趣,欢迎跟小编进行交流,小编微信为sxw2251,加我要写好备注哟!
我的微信