博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spark SQL学习(spark连接 mysql)
阅读量:5815 次
发布时间:2019-06-18

本文共 12953 字,大约阅读时间需要 43 分钟。

spark连接mysql(打jar包方式)

package wujiadong_sparkSQLimport java.util.Propertiesimport org.apache.spark.sql.SQLContextimport org.apache.spark.{SparkConf, SparkContext}/**  * Created by Administrator on 2017/2/14.  */object JdbcOperation {  def main(args: Array[String]): Unit = {    val conf = new SparkConf().setAppName("JdbcOperation")    val sc = new SparkContext(conf)    val sqlContext = new SQLContext(sc)    val properties = new Properties()    properties.put("user","feigu")    properties.put("password","feigu")    val url = "jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull"    val stud_scoreDF = sqlContext.read.jdbc(url,"stud_score",properties)    stud_scoreDF.show()  }}

提交集群

hadoop@master:~/wujiadong$ spark-submit --driver-class-path /home/hadoop/bigdata/hive/lib/mysql-connector-java-5.1.10-2.jar  --class wujiadong_sparkSQL.JdbcOperation  --executor-memory 500m --total-executor-cores 2 /home/hadoop/wujiadong/wujiadong.spark.jar  或者hadoop@master:~/wujiadong$ spark-submit --jars /home/hadoop/bigdata/hive/lib/mysql-connector-java-5.1.10-2.jar  --class wujiadong_sparkSQL.JdbcOperation  --executor-memory 500m --total-executor-cores 2 /home/hadoop/wujiadong/wujiadong.spark.jar

运行结果

hadoop@master:~/wujiadong$ spark-submit --driver-class-path /home/hadoop/bigdata/hive/lib/mysql-connector-java-5.1.10-2.jar  --class wujiadong_sparkSQL.JdbcOperation  --executor-memory 500m --total-executor-cores 2 /home/hadoop/wujiadong/wujiadong.spark.jar17/02/15 13:21:06 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable17/02/15 13:21:09 INFO Slf4jLogger: Slf4jLogger started17/02/15 13:21:09 INFO Remoting: Starting remoting17/02/15 13:21:09 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@192.168.1.131:40654]17/02/15 13:21:13 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.+----------+--------+--------+--------+---------+---------+| stud_code|sub_code|sub_name|sub_tech|sub_score|stat_date|+----------+--------+--------+--------+---------+---------+|2015101000|   10101|    数学分析|        |       90|     null||2015101000|   10102|    高等代数|        |       88|     null||2015101000|   10103|    大学物理|        |       67|     null||2015101000|   10104|   计算机原理|        |       78|     null||2015101000|   10105|     电磁学|        |       89|     null||2015101001|   10101|    数学分析|        |       87|     null||2015101001|   10102|    高等代数|        |       78|     null||2015101001|   10103|    大学物理|        |       88|     null||2015101001|   10104|   计算机原理|        |       86|     null||2015101001|   10105|     电磁学|        |       91|     null||2015101002|   10101|    数学分析|        |       98|     null||2015101002|   10102|    高等代数|        |       97|     null||2015101002|   10103|    大学物理|        |       95|     null||2015101002|   10104|   计算机原理|        |       96|     null||2015101002|   10105|     电磁学|        |       90|     null||2015101003|   10101|    数学分析|        |       70|     null||2015101003|   10102|    高等代数|        |       87|     null||2015101003|   10103|    大学物理|        |       65|     null||2015101003|   10104|   计算机原理|        |       98|     null||2015101003|   10105|     电磁学|        |       76|     null|+----------+--------+--------+--------+---------+---------+only showing top 20 rows17/02/15 13:21:24 INFO RemoteActorRefProvider$RemotingTerminator: Shutting down remote daemon.17/02/15 13:21:24 INFO RemoteActorRefProvider$RemotingTerminator: Remote daemon shut down; proceeding with flushing remote transports.

常见报错1

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:mysql://slave02:3306/testdb报错原因是没有jdbc驱动解决办法  --driver-class-path xxx.jar 或者  --jars xxx.jar

如果添加了命令和jar运行也不行,则用以下办法

在%JAVA_HOME%\jre\lib\ext下添加mysql-connector-java-5.1.12-bin.jar 问题解决

常见报错2

java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date0000-00-00 ”在MySQL中是作为一个特殊值存在的,但是在Java中, java.sql.Date 会被视为 不合法的值,被JVM认为格式不正确。  解决办法:在jdbc的url加上   zeroDateTimeBehavior参数url = "jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull"

spark连接mysql(spark shell方式)

方式1

//import sqlContext.implicits._   //有时需要用到,需要时导入scala> import org.apache.spark.sql.SQLContextimport org.apache.spark.sql.SQLContextscala> val sqlContext = new SQLContext(sc)sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@6cd1eescala> val url ="jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull"url: String = jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNullscala> val prop = new java.util.Propertiesprop: java.util.Properties = {}scala> prop.setProperty("user","feigu")res3: Object = nullscala> prop.setProperty("password","feigu")res4: Object = nullscala> val stud_scoreDF = sqlContext.read.jdbc(url,"stud_score",prop)stud_scoreDF: org.apache.spark.sql.DataFrame = [stud_code: string, sub_code: string, sub_name: string, sub_tech: string, sub_score: int, stat_date: date]scala> stud_scoreDF.show()+----------+--------+--------+--------+---------+---------+| stud_code|sub_code|sub_name|sub_tech|sub_score|stat_date|+----------+--------+--------+--------+---------+---------+|2015101000|   10101|    数学分析|        |       90|     null||2015101000|   10102|    高等代数|        |       88|     null||2015101000|   10103|    大学物理|        |       67|     null||2015101000|   10104|   计算机原理|        |       78|     null||2015101000|   10105|     电磁学|        |       89|     null||2015101001|   10101|    数学分析|        |       87|     null||2015101001|   10102|    高等代数|        |       78|     null||2015101001|   10103|    大学物理|        |       88|     null||2015101001|   10104|   计算机原理|        |       86|     null||2015101001|   10105|     电磁学|        |       91|     null||2015101002|   10101|    数学分析|        |       98|     null||2015101002|   10102|    高等代数|        |       97|     null||2015101002|   10103|    大学物理|        |       95|     null||2015101002|   10104|   计算机原理|        |       96|     null||2015101002|   10105|     电磁学|        |       90|     null||2015101003|   10101|    数学分析|        |       70|     null||2015101003|   10102|    高等代数|        |       87|     null||2015101003|   10103|    大学物理|        |       65|     null||2015101003|   10104|   计算机原理|        |       98|     null||2015101003|   10105|     电磁学|        |       76|     null|+----------+--------+--------+--------+---------+---------+only showing top 20 rows

方式2

scala> import org.apache.spark.sql.SQLContext import org.apache.spark.sql.SQLContextscala> val sqlContext = new SQLContext(sc)sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@351d726cscala> import sqlContext.implicits._ import sqlContext.implicits._scala> val url ="jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull"url: String = jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNullscala> val table = "stud_score"table: String = stud_scorescala> val reader = sqlContext.read.format("jdbc")reader: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918scala> val reader = sqlContext.read.format("jdbc")reader: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918scala> reader.option("url",url)res0: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918scala> reader.option("dbtable",table)res4: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918scala> reader.option("driver","com.mysql.jdbc.Driver")res6: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918scala> reader.option("user","feigu")res7: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918scala> reader.option("password","feigu")res8: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918scala> val DF = reader.load()DF: org.apache.spark.sql.DataFrame = [stud_code: string, sub_code: string, sub_name: string, sub_tech: string, sub_score: int, stat_date: date]scala> DF.show()+----------+--------+--------+--------+---------+---------+| stud_code|sub_code|sub_name|sub_tech|sub_score|stat_date|+----------+--------+--------+--------+---------+---------+|2015101000|   10101|    数学分析|        |       90|     null||2015101000|   10102|    高等代数|        |       88|     null||2015101000|   10103|    大学物理|        |       67|     null||2015101000|   10104|   计算机原理|        |       78|     null||2015101000|   10105|     电磁学|        |       89|     null||2015101001|   10101|    数学分析|        |       87|     null||2015101001|   10102|    高等代数|        |       78|     null||2015101001|   10103|    大学物理|        |       88|     null||2015101001|   10104|   计算机原理|        |       86|     null||2015101001|   10105|     电磁学|        |       91|     null||2015101002|   10101|    数学分析|        |       98|     null||2015101002|   10102|    高等代数|        |       97|     null||2015101002|   10103|    大学物理|        |       95|     null||2015101002|   10104|   计算机原理|        |       96|     null||2015101002|   10105|     电磁学|        |       90|     null||2015101003|   10101|    数学分析|        |       70|     null||2015101003|   10102|    高等代数|        |       87|     null||2015101003|   10103|    大学物理|        |       65|     null||2015101003|   10104|   计算机原理|        |       98|     null||2015101003|   10105|     电磁学|        |       76|     null|+----------+--------+--------+--------+---------+---------+only showing top 20 rows

方式3

scala> import org.apache.spark.sql.SQLContext import org.apache.spark.sql.SQLContextscala> val sqlContext = new SQLContext(sc)sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@fdf029ascala> val jdbcDF = sqlContext.read.format("jdbc").options(Map("url" -> "jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull","driver" -> "com.mysql.jdbc.Driver", "dbtable" -> "testdb.stud_score","user" -> "feigu","password" -> "feigu")).load()jdbcDF: org.apache.spark.sql.DataFrame = [stud_code: string, sub_code: string, sub_name: string, sub_tech: string, sub_score: int, stat_date: date]scala> jdbcDF.show()+----------+--------+--------+--------+---------+---------+| stud_code|sub_code|sub_name|sub_tech|sub_score|stat_date|+----------+--------+--------+--------+---------+---------+|2015101000|   10101|    数学分析|        |       90|     null||2015101000|   10102|    高等代数|        |       88|     null||2015101000|   10103|    大学物理|        |       67|     null||2015101000|   10104|   计算机原理|        |       78|     null||2015101000|   10105|     电磁学|        |       89|     null||2015101001|   10101|    数学分析|        |       87|     null||2015101001|   10102|    高等代数|        |       78|     null||2015101001|   10103|    大学物理|        |       88|     null||2015101001|   10104|   计算机原理|        |       86|     null||2015101001|   10105|     电磁学|        |       91|     null||2015101002|   10101|    数学分析|        |       98|     null||2015101002|   10102|    高等代数|        |       97|     null||2015101002|   10103|    大学物理|        |       95|     null||2015101002|   10104|   计算机原理|        |       96|     null||2015101002|   10105|     电磁学|        |       90|     null||2015101003|   10101|    数学分析|        |       70|     null||2015101003|   10102|    高等代数|        |       87|     null||2015101003|   10103|    大学物理|        |       65|     null||2015101003|   10104|   计算机原理|        |       98|     null||2015101003|   10105|     电磁学|        |       76|     null|+----------+--------+--------+--------+---------+---------+only showing top 20 rows//注册为一个表。这就可以直接进行select等操作样scala> jdbcDF.registerTempTable("wu_stud_info")scala> jdbcDF.sqlContext.sql("select sub_name from wu_stud_info").collect.foreach(println)[数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][数学分析][高等代数][大学物理][计算机原理][电磁学][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构][计算机软件与理论][计算机系统结构][操作系统][概率统计][汇编语言][数据结构]

转载于:https://www.cnblogs.com/wujiadong2014/p/6516598.html

你可能感兴趣的文章
ORM数据库框架 SQLite 常用数据库框架比较 MD
查看>>
华为OJ 名字美丽度
查看>>
微信公众号与APP微信第三方登录账号打通
查看>>
onchange()事件的应用
查看>>
Windows 下最佳的 C++ 开发的 IDE 是什么?
查看>>
软件工程师成长为架构师必备的十项技能
查看>>
python 异常
查看>>
百度账号注销
查看>>
Lua语言特色
查看>>
C# 单机Window 程序 sqlite 数据库实现
查看>>
mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
查看>>
BIEE Demo(RPD创建 + 分析 +仪表盘 )
查看>>
Cocos2dx 3.0开发环境的搭建--Eclipse建立在Android工程
查看>>
基本概念复习
查看>>
重构第10天:提取方法(Extract Method)
查看>>
Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理
查看>>
解决pycharm在ubuntu下搜狗输入法一直固定在左下角的问题
查看>>
“Info.plist” couldn’t be removed
查看>>
多线程day01
查看>>
react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)
查看>>