spark连接mysql(打jar包方式)

  1. package wujiadong_sparkSQL
  2. import java.util.Properties
  3. import org.apache.spark.sql.SQLContext
  4. import org.apache.spark.{SparkConf, SparkContext}
  5. /**
  6. * Created by Administrator on 2017/2/14.
  7. */
  8. object JdbcOperation {
  9. def main(args: Array[String]): Unit = {
  10. val conf = new SparkConf().setAppName("JdbcOperation")
  11. val sc = new SparkContext(conf)
  12. val sqlContext = new SQLContext(sc)
  13. val properties = new Properties()
  14. properties.put("user","feigu")
  15. properties.put("password","feigu")
  16. val url = "jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull"
  17. val stud_scoreDF = sqlContext.read.jdbc(url,"stud_score",properties)
  18. stud_scoreDF.show()
  19. }
  20. }

提交集群

  1. 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
  2. 或者
  3. 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

运行结果

  1. 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
  2. 17/02/15 13:21:06 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. 17/02/15 13:21:09 INFO Slf4jLogger: Slf4jLogger started
  4. 17/02/15 13:21:09 INFO Remoting: Starting remoting
  5. 17/02/15 13:21:09 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkDriver@192.168.1.131:40654]
  6. 17/02/15 13:21:13 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.
  7. +----------+--------+--------+--------+---------+---------+
  8. | stud_code|sub_code|sub_name|sub_tech|sub_score|stat_date|
  9. +----------+--------+--------+--------+---------+---------+
  10. |2015101000| 10101| 数学分析| | 90| null|
  11. |2015101000| 10102| 高等代数| | 88| null|
  12. |2015101000| 10103| 大学物理| | 67| null|
  13. |2015101000| 10104| 计算机原理| | 78| null|
  14. |2015101000| 10105| 电磁学| | 89| null|
  15. |2015101001| 10101| 数学分析| | 87| null|
  16. |2015101001| 10102| 高等代数| | 78| null|
  17. |2015101001| 10103| 大学物理| | 88| null|
  18. |2015101001| 10104| 计算机原理| | 86| null|
  19. |2015101001| 10105| 电磁学| | 91| null|
  20. |2015101002| 10101| 数学分析| | 98| null|
  21. |2015101002| 10102| 高等代数| | 97| null|
  22. |2015101002| 10103| 大学物理| | 95| null|
  23. |2015101002| 10104| 计算机原理| | 96| null|
  24. |2015101002| 10105| 电磁学| | 90| null|
  25. |2015101003| 10101| 数学分析| | 70| null|
  26. |2015101003| 10102| 高等代数| | 87| null|
  27. |2015101003| 10103| 大学物理| | 65| null|
  28. |2015101003| 10104| 计算机原理| | 98| null|
  29. |2015101003| 10105| 电磁学| | 76| null|
  30. +----------+--------+--------+--------+---------+---------+
  31. only showing top 20 rows
  32. 17/02/15 13:21:24 INFO RemoteActorRefProvider$RemotingTerminator: Shutting down remote daemon.
  33. 17/02/15 13:21:24 INFO RemoteActorRefProvider$RemotingTerminator: Remote daemon shut down; proceeding with flushing remote transports.

常见报错1

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

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

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

常见报错2

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

spark连接mysql(spark shell方式)

方式1


  1. //import sqlContext.implicits._ //有时需要用到,需要时导入
  2. scala> import org.apache.spark.sql.SQLContext
  3. import org.apache.spark.sql.SQLContext
  4. scala> val sqlContext = new SQLContext(sc)
  5. sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@6cd1ee
  6. scala> val url ="jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull"
  7. url: String = jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull
  8. scala> val prop = new java.util.Properties
  9. prop: java.util.Properties = {}
  10. scala> prop.setProperty("user","feigu")
  11. res3: Object = null
  12. scala> prop.setProperty("password","feigu")
  13. res4: Object = null
  14. scala> val stud_scoreDF = sqlContext.read.jdbc(url,"stud_score",prop)
  15. 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]
  16. scala> stud_scoreDF.show()
  17. +----------+--------+--------+--------+---------+---------+
  18. | stud_code|sub_code|sub_name|sub_tech|sub_score|stat_date|
  19. +----------+--------+--------+--------+---------+---------+
  20. |2015101000| 10101| 数学分析| | 90| null|
  21. |2015101000| 10102| 高等代数| | 88| null|
  22. |2015101000| 10103| 大学物理| | 67| null|
  23. |2015101000| 10104| 计算机原理| | 78| null|
  24. |2015101000| 10105| 电磁学| | 89| null|
  25. |2015101001| 10101| 数学分析| | 87| null|
  26. |2015101001| 10102| 高等代数| | 78| null|
  27. |2015101001| 10103| 大学物理| | 88| null|
  28. |2015101001| 10104| 计算机原理| | 86| null|
  29. |2015101001| 10105| 电磁学| | 91| null|
  30. |2015101002| 10101| 数学分析| | 98| null|
  31. |2015101002| 10102| 高等代数| | 97| null|
  32. |2015101002| 10103| 大学物理| | 95| null|
  33. |2015101002| 10104| 计算机原理| | 96| null|
  34. |2015101002| 10105| 电磁学| | 90| null|
  35. |2015101003| 10101| 数学分析| | 70| null|
  36. |2015101003| 10102| 高等代数| | 87| null|
  37. |2015101003| 10103| 大学物理| | 65| null|
  38. |2015101003| 10104| 计算机原理| | 98| null|
  39. |2015101003| 10105| 电磁学| | 76| null|
  40. +----------+--------+--------+--------+---------+---------+
  41. only showing top 20 rows

方式2

  1. scala> import org.apache.spark.sql.SQLContext
  2. import org.apache.spark.sql.SQLContext
  3. scala> val sqlContext = new SQLContext(sc)
  4. sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@351d726c
  5. scala> import sqlContext.implicits._
  6. import sqlContext.implicits._
  7. scala> val url ="jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull"
  8. url: String = jdbc:mysql://slave02:3306/testdb?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull
  9. scala> val table = "stud_score"
  10. table: String = stud_score
  11. scala> val reader = sqlContext.read.format("jdbc")
  12. reader: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
  13. scala> val reader = sqlContext.read.format("jdbc")
  14. reader: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
  15. scala> reader.option("url",url)
  16. res0: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
  17. scala> reader.option("dbtable",table)
  18. res4: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
  19. scala> reader.option("driver","com.mysql.jdbc.Driver")
  20. res6: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
  21. scala> reader.option("user","feigu")
  22. res7: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
  23. scala> reader.option("password","feigu")
  24. res8: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
  25. scala> val DF = reader.load()
  26. DF: org.apache.spark.sql.DataFrame = [stud_code: string, sub_code: string, sub_name: string, sub_tech: string, sub_score: int, stat_date: date]
  27. scala> DF.show()
  28. +----------+--------+--------+--------+---------+---------+
  29. | stud_code|sub_code|sub_name|sub_tech|sub_score|stat_date|
  30. +----------+--------+--------+--------+---------+---------+
  31. |2015101000| 10101| 数学分析| | 90| null|
  32. |2015101000| 10102| 高等代数| | 88| null|
  33. |2015101000| 10103| 大学物理| | 67| null|
  34. |2015101000| 10104| 计算机原理| | 78| null|
  35. |2015101000| 10105| 电磁学| | 89| null|
  36. |2015101001| 10101| 数学分析| | 87| null|
  37. |2015101001| 10102| 高等代数| | 78| null|
  38. |2015101001| 10103| 大学物理| | 88| null|
  39. |2015101001| 10104| 计算机原理| | 86| null|
  40. |2015101001| 10105| 电磁学| | 91| null|
  41. |2015101002| 10101| 数学分析| | 98| null|
  42. |2015101002| 10102| 高等代数| | 97| null|
  43. |2015101002| 10103| 大学物理| | 95| null|
  44. |2015101002| 10104| 计算机原理| | 96| null|
  45. |2015101002| 10105| 电磁学| | 90| null|
  46. |2015101003| 10101| 数学分析| | 70| null|
  47. |2015101003| 10102| 高等代数| | 87| null|
  48. |2015101003| 10103| 大学物理| | 65| null|
  49. |2015101003| 10104| 计算机原理| | 98| null|
  50. |2015101003| 10105| 电磁学| | 76| null|
  51. +----------+--------+--------+--------+---------+---------+
  52. only showing top 20 rows

方式3

  1. scala> import org.apache.spark.sql.SQLContext
  2. import org.apache.spark.sql.SQLContext
  3. scala> val sqlContext = new SQLContext(sc)
  4. sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@fdf029a
  5. scala> 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()
  6. jdbcDF: org.apache.spark.sql.DataFrame = [stud_code: string, sub_code: string, sub_name: string, sub_tech: string, sub_score: int, stat_date: date]
  7. scala> jdbcDF.show()
  8. +----------+--------+--------+--------+---------+---------+
  9. | stud_code|sub_code|sub_name|sub_tech|sub_score|stat_date|
  10. +----------+--------+--------+--------+---------+---------+
  11. |2015101000| 10101| 数学分析| | 90| null|
  12. |2015101000| 10102| 高等代数| | 88| null|
  13. |2015101000| 10103| 大学物理| | 67| null|
  14. |2015101000| 10104| 计算机原理| | 78| null|
  15. |2015101000| 10105| 电磁学| | 89| null|
  16. |2015101001| 10101| 数学分析| | 87| null|
  17. |2015101001| 10102| 高等代数| | 78| null|
  18. |2015101001| 10103| 大学物理| | 88| null|
  19. |2015101001| 10104| 计算机原理| | 86| null|
  20. |2015101001| 10105| 电磁学| | 91| null|
  21. |2015101002| 10101| 数学分析| | 98| null|
  22. |2015101002| 10102| 高等代数| | 97| null|
  23. |2015101002| 10103| 大学物理| | 95| null|
  24. |2015101002| 10104| 计算机原理| | 96| null|
  25. |2015101002| 10105| 电磁学| | 90| null|
  26. |2015101003| 10101| 数学分析| | 70| null|
  27. |2015101003| 10102| 高等代数| | 87| null|
  28. |2015101003| 10103| 大学物理| | 65| null|
  29. |2015101003| 10104| 计算机原理| | 98| null|
  30. |2015101003| 10105| 电磁学| | 76| null|
  31. +----------+--------+--------+--------+---------+---------+
  32. only showing top 20 rows
  33. //注册为一个表。这就可以直接进行select等操作样
  34. scala> jdbcDF.registerTempTable("wu_stud_info")
  35. scala> jdbcDF.sqlContext.sql("select sub_name from wu_stud_info").collect.foreach(println)
  36. [数学分析]
  37. [高等代数]
  38. [大学物理]
  39. [计算机原理]
  40. [电磁学]
  41. [数学分析]
  42. [高等代数]
  43. [大学物理]
  44. [计算机原理]
  45. [电磁学]
  46. [数学分析]
  47. [高等代数]
  48. [大学物理]
  49. [计算机原理]
  50. [电磁学]
  51. [数学分析]
  52. [高等代数]
  53. [大学物理]
  54. [计算机原理]
  55. [电磁学]
  56. [数学分析]
  57. [高等代数]
  58. [大学物理]
  59. [计算机原理]
  60. [电磁学]
  61. [数学分析]
  62. [高等代数]
  63. [大学物理]
  64. [计算机原理]
  65. [电磁学]
  66. [数学分析]
  67. [高等代数]
  68. [大学物理]
  69. [计算机原理]
  70. [电磁学]
  71. [数学分析]
  72. [高等代数]
  73. [大学物理]
  74. [计算机原理]
  75. [电磁学]
  76. [数学分析]
  77. [高等代数]
  78. [大学物理]
  79. [计算机原理]
  80. [电磁学]
  81. [数学分析]
  82. [高等代数]
  83. [大学物理]
  84. [计算机原理]
  85. [电磁学]
  86. [数学分析]
  87. [高等代数]
  88. [大学物理]
  89. [计算机原理]
  90. [电磁学]
  91. [计算机软件与理论]
  92. [计算机系统结构]
  93. [操作系统]
  94. [概率统计]
  95. [汇编语言]
  96. [数据结构]
  97. [计算机软件与理论]
  98. [计算机系统结构]
  99. [操作系统]
  100. [概率统计]
  101. [汇编语言]
  102. [数据结构]
  103. [计算机软件与理论]
  104. [计算机系统结构]
  105. [操作系统]
  106. [概率统计]
  107. [汇编语言]
  108. [数据结构]
  109. [计算机软件与理论]
  110. [计算机系统结构]
  111. [操作系统]
  112. [概率统计]
  113. [汇编语言]
  114. [数据结构]
  115. [计算机软件与理论]
  116. [计算机系统结构]
  117. [操作系统]
  118. [概率统计]
  119. [汇编语言]
  120. [数据结构]
  121. [计算机软件与理论]
  122. [计算机系统结构]
  123. [操作系统]
  124. [概率统计]
  125. [汇编语言]
  126. [数据结构]
  127. [计算机软件与理论]
  128. [计算机系统结构]
  129. [操作系统]
  130. [概率统计]
  131. [汇编语言]
  132. [数据结构]
  133. [计算机软件与理论]
  134. [计算机系统结构]
  135. [操作系统]
  136. [概率统计]
  137. [汇编语言]
  138. [数据结构]
  139. [计算机软件与理论]
  140. [计算机系统结构]
  141. [操作系统]
  142. [概率统计]
  143. [汇编语言]
  144. [数据结构]
  145. [计算机软件与理论]
  146. [计算机系统结构]
  147. [操作系统]
  148. [概率统计]
  149. [汇编语言]
  150. [数据结构]
  151. [计算机软件与理论]
  152. [计算机系统结构]
  153. [操作系统]
  154. [概率统计]
  155. [汇编语言]
  156. [数据结构]

spark SQL学习(spark连接 mysql)的更多相关文章

  1. IDEA 中Spark SQL通过JDBC连接mysql数据库

    一.IDEA装驱动: 1.下载一个MySQL的JDBC驱动:mysql-connector-java-5.1.44.tar.gz2.在idea Open Moudle Settings 在 Moudl ...

  2. spark SQL学习(认识spark SQL)

    spark SQL初步认识 spark SQL是spark的一个模块,主要用于进行结构化数据的处理.它提供的最核心的编程抽象就是DataFrame. DataFrame:它可以根据很多源进行构建,包括 ...

  3. spark SQL学习(spark连接hive)

    spark 读取hive中的数据 scala> import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql. ...

  4. spark SQL学习(综合案例-日志分析)

    日志分析 scala> import org.apache.spark.sql.types._ scala> import org.apache.spark.sql.Row scala&g ...

  5. spark SQL学习(案例-统计每日销售)

    需求:统计每日销售额 package wujiadong_sparkSQL import org.apache.spark.sql.types._ import org.apache.spark.sq ...

  6. spark SQL学习(案例-统计每日uv)

    需求:统计每日uv package wujiadong_sparkSQL import org.apache.spark.sql.{Row, SQLContext} import org.apache ...

  7. spark SQL学习(数据源之json)

    准备工作 数据文件students.json {"id":1, "name":"leo", "age":18} {&qu ...

  8. spark SQL学习(数据源之parquet)

    Parquet是面向分析型业务得列式存储格式 编程方式加载数据 代码示例 package wujiadong_sparkSQL import org.apache.spark.sql.SQLConte ...

  9. spark SQL学习(load和save操作)

    load操作:主要用于加载数据,创建出DataFrame save操作:主要用于将DataFrame中的数据保存到文件中 代码示例(默认为parquet数据源类型) package wujiadong ...

随机推荐

  1. dstat命令--检查linux系统性能

    系统性能的相关工具:vmstat.netstat.iostat.ifstat. dstat命令可以查看虚拟内存.网络连接和接口.cpu活动.输入/输出设备等.

  2. 【转】UML中类与类之间的5种关系表示

    一.继承关系      继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extends明确标识,在设计时一 ...

  3. BitTrex行情查看与技术指标系统

    上个月的时候,向TradingView申请K线图行情插件,填了各种资料,被问了N多问题,结果却仍是不愿意提供插件给我们. 于是,我们自己开发了一个BitTre行情查看与技术指标系统, 这套系统被国内多 ...

  4. Yii框架2.0的过滤器

    过滤器是 控制器 动作 执行之前或之后执行的对象. 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容. 过滤器可包含 ...

  5. Cyclic Nacklace ---hdu3746(循环节,kmp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 给你一个字符串,让你在后面加尽量少的字符,使得这个字符串成为一个重复串. abca---添加bc ...

  6. #define宏定义

    1 #define的概念  #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本.  该命令有两种格式:一种是简单的宏定义, ...

  7. python常见模块之time模块

    一.模块简介 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(tim ...

  8. java并发深入

    对象由数据+行为组成.数据就是字段,行为就是方法. 并发须要保证这些可被多个线程訪问的共享对象数据的完整性,以及某些特定完整性语义. 比方一个类有一个字段count=0,两个线程同一时候对它做加1操作 ...

  9. 004-hadoop家族概述

    hadoop家族 名称 简介   Hadoop 分布式基础架构 Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了 ...

  10. sql中的连接表达式,视图,事务等。

    给定两张表 表A ),description )); ,'N1','AD1'); ,'N2','AD2'); mysql> SELECT * FROM a; +----+------+----- ...