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. Apache Kafka源码分析 – Replica and Partition

    Replica 对于local replica, 需要记录highWatermarkValue,表示当前已经committed的数据对于remote replica,需要记录logEndOffsetV ...

  2. Storm-源码分析- Messaging (backtype.storm.messaging)

    先定义两个接口和一个类 TaskMessage类本身比较好理解, 抽象storm的message格式 对于IContext, 注释也说了, 定义messaging plugin, 通过什么渠道去发送m ...

  3. datasnap 授权验证DSAuthenticationManager方法应用

    服务端 1.服务端只需要增加DSAuthenticationManager1并且把dshttpservice的AuthenticationManager属性设置为DSAuthenticationMan ...

  4. Python多线程、多进程和协程的实例讲解

    线程.进程和协程是什么 线程.进程和协程的详细概念解释和原理剖析不是本文的重点,本文重点讲述在Python中怎样实际使用这三种东西 参考: 进程.线程.协程之概念理解 进程(Process)是计算机中 ...

  5. 移动支付--银联,支付宝,微信(android)

    在这个移动互联网快速发展的时代,手机已经成为人们生活或者出行之中必不可少的设备了,如今非常多城市的商户都能够採用支付宝,微信支付了.人们出门仅仅须要随身携带带手机.不用带大量现金就能够放心购物了.如今 ...

  6. spring 拾遗

    1.@PostConstruct VS  init-method 1.1 both BeanPostProcessor 1.2 @PostConstruct is a JSR-250 annotati ...

  7. ubuntu下30天自制os 的学习计划

    30天自制os的学习也告一段落,由于有其他更重要的事情要集中精力去处理.书本从15天開始就是多任务了.可是不得不停下一阵子. 以下总结下学习中遇到的一些问题. 1:学习这前14天中.问题最大的是关于G ...

  8. PAT 1084 Broken Keyboard[比较]

    1084 Broken Keyboard (20 分) On a broken keyboard, some of the keys are worn out. So when you type so ...

  9. Delphi APP 開發入門(三)簡易計算機

    Delphi APP 開發入門(三)簡易計算機 分享: Share on facebookShare on twitterShare on google_plusone_share   閲讀次數:68 ...

  10. Portal系统中当切换学生时仍旧停留在当前页面的实现方法

    一.BaseController.cs文件 1.OnActionExecuting方法,该方法可以被各子Controller重写 protected override void OnActionExe ...