用Spark SQL操作MySQL数据库的表需要加载mysql-connector-java的JAR包mysql-connector-java-5.1.21.jar。这个JAR包是Spark连接MySQL的数据库驱动包,如已经下载,可以把该JAR包添加到项目的Libraries中;若还没有下载这个包,可以将mySQL-con-nector-java的依赖关系配置到pom-xml中,pom.xml是Naven的Jar依赖关系管理配置文件,可通过pom.xml自动从网上下载这个JAR包。在pom.xml文件中添加MySQL的JAR包依赖如下操作:
程序需要导入的类如下:
1.主程序及相关代码
在项目中新建Object,名字是SparkSQLBookMysql,Spark从MySQL数据库中读取学生信息表、分数表的信息,并进行相关的关联查询。主程序如下:
代码说明:
1)setStudentInfoStructType方法:第一个参数传入sqlContext,第二个参数传入studentIn- foDataFrame,将studentInfoDataFrame进行map转换为Rows格式,通过getStudentInfoStruct-Type构建学生信息的schema;然后通过SQLContext的createDataFrame(row,schema)方法创建DataFrame,即结构化的学生信息DataFrame(studentInfoStructed),基于学生信息Dat-aFrame(studentInfoStructed)可以统计学生ID、学生姓名;性别分别为男、女的学生数量等信息。
2)setScoreStructType方法:第一个参数传入sqlContext,第二个参数传入scoreDat-aFrame,将scoreDataFrame进行map转换为Rows格式,通过getScoreSchema构建分数信息的schema;然后通过SQLContext的createDataFrame(row,schema)方法创建DataFrame,即结构化的分数信息DataFrame(scoreStructed),基于分数信息DataFrame(scoreStructed)可以统计分数大于90分的信息;分数从高到低排名查询;查询分数最高的学生的ID和姓名;分数小于90的分数加5分等操作。
代码说明
1)getStudentInfoStructType方法构建学生信息的schema:创建一个元素类型为StructField的ArrayBuffer数组studentInfoStructFields,其中StructField是一个case class,case class第一个成员变量是名称name,第二个成员变量是数据类型dataType,第三个成员变量是nullable,是否允许字段为空值;第四个成员变量是metadata,是该字段的元数据,如果列的内容未被修改,在selection时元数据应保存,元数据类型如metadata.jsonValue等,metadata默认设置为Metadata.empty。在studentInfoStructFields中依次加入(ID、整型、允许空)、(姓名、字符串型、允许空)、(性别、字符串型、允许空)(生日、字符串型、允许空)的字段,返回StructType(studentInfoStructFields)结构化schema。
2)getScoreSchema方法构建分数信息的schema:创建一个元素类型为StructField的Ar- rayBuffer数组scoreStructFields,在scoreStructFields中依次加入(ID、整型、允许空)、(姓名、字符串型、允许空)、(分数、浮点数型、允许空)的字段,返回StructType(score- StructFields)结构化schema。
写完代码后,用IntelliJ IDEA将其打成JAR包,JAR包的名字是SparkSQLBOOK.jar,写脚本提交给Spark运行。具体的写脚本和打包过程在此不再评述,程序提交的脚本如下:
提交程序时把该脚本文件放到Spark的bin目录下。
2.相关操作示例
下面是查询相关的系列示例。
1)示例一:查询表StudentInfo和Score中的内容。
本示例用于查询表StudentInfo和Score中的内容,代码如下:
输出结果如下所示。
2)示例二:Select部分字段。
结果如下:
3)示例三:统计男女数量。(www.xing528.com)
程序输出结果如下:
4)示例四:随机分成两组。
程序输出结果如下:
5)示例五:对表进行inner join。
程序输出结果如下:
6)示例六:取出Score大于90分的信息。
程序输出结果如下:
7)示例七:分数从高到低排名。
程序输出结果如下:
8)示例八:统计分数的top 3。
程序输出结果如下:
9)示例九:查询最高分。
程序输出结果如下:
10)示例十:求平均分数。
程序输出结果如下:
11)示例十一:把Score小于90的分数加5分。
程序输出结果如下:
12)示例十二:向表studentInfo中插入数据。
程序输出结果如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。