在日常的工作中,MySQL和SQLServer是经常使用到的两种数据库,直接连接使用的话是很简单的,如果说需要基于pyspark做连接工具,进行相应的数据查询操作的话就会复杂一点,今天简单的基于pyspark模块实现了连接MySQL数据库,执行给定的查询语句,返回查询结果数据。
接下来简单的说一点自己学习使用pyspark以来的记录学习,具体如下:
pyspark顾名思义就是由python和spark组合使用的。Spark提供了一个Python_Shell,即pyspark,从而可以以交互的方式使用Python编写Spark程序。有关Spark的基本架构以及pyspark环境配置相关的内容本篇博客就不再多加阐述了,网络上也有很多不错的讲解。
pyspark里最核心的模块是SparkContext(简称sc),最重要的数据载体是RDD。RDD就像一个NumPy array或者一个Pandas Series,可以视作一个有序的item集合。只不过这些item并不存在driver端的内存里,而是被分割成很多个partitions,每个partition的数据存在集群的executor的内存中。parkSession是Spark 2.0引入的新概念。SparkSession为用户提供了统一的切入点,来让用户学习spark的各项功能。 在spark的早期版本中,SparkContext是spark的主要切入点,由于RDD是主要的API,我们通过sparkcontext来创建和操作RDD。对于每个其他的API,我们需要使用不同的context。例如,对于Streming,我们需要使用StreamingContext;对于sql,使用sqlContext;对于hive,使用hiveContext。但是随着DataSet和DataFrame的API逐渐成为标准的API,就需要为他们建立接入点。所以在spark2.0中,引入SparkSession作为DataSet和DataFrame API的切入点。SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。SparkSession内部封装了SparkContext,所以计算实际上是由SparkContext完成的。
接下来回归正题,基于pyspark的MySQL数据库操作实现如下:
def mysqlDataRead(table='table'):
'''
读取 MySQL 数据库内容
'''
sqlContext=SQLContext(sc)
url='jdbc:mysql://'+mysql['host']+':'+str(mysql['port'])+'/'+mysql['db']+'?'+'user='+mysql['user']+'&password='+mysql['passwd']
df=sqlContext.read.format("jdbc").options(url=url,dbtable=table).load()
print '=========================================================='
df.show()
all_columns=df.columns
print '=========================================================='
print all_columns
res_list=df.collect()
print '=========================================================='
print type(res_list)
print '=========================================================='
result=splitRowData(all_columns,res_list)
for one in result[:10]:
print one
sc.stop()
return result
简单实践如下:
table='(SELECT * FROM myTable LIMIT 5) T'
mysqlDataRead(table=table)
结果如下:
简单的小工具!