spark SQL学习(spark连接 mysql)
spark连接mysql(打jar包方式)
package wujiadong_sparkSQL
import java.util.Properties
import org.apache.spark.sql.SQLContext
import 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.jar
17/02/15 13:21:06 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/02/15 13:21:09 INFO Slf4jLogger: Slf4jLogger started
17/02/15 13:21:09 INFO Remoting: Starting remoting
17/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 rows
17/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.Date
0000-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.SQLContext
import org.apache.spark.sql.SQLContext
scala> val sqlContext = new SQLContext(sc)
sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@6cd1ee
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=convertToNull
scala> val prop = new java.util.Properties
prop: java.util.Properties = {}
scala> prop.setProperty("user","feigu")
res3: Object = null
scala> prop.setProperty("password","feigu")
res4: Object = null
scala> 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.SQLContext
scala> val sqlContext = new SQLContext(sc)
sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@351d726c
scala> 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=convertToNull
scala> val table = "stud_score"
table: String = stud_score
scala> val reader = sqlContext.read.format("jdbc")
reader: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
scala> val reader = sqlContext.read.format("jdbc")
reader: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
scala> reader.option("url",url)
res0: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
scala> reader.option("dbtable",table)
res4: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
scala> reader.option("driver","com.mysql.jdbc.Driver")
res6: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
scala> reader.option("user","feigu")
res7: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
scala> reader.option("password","feigu")
res8: org.apache.spark.sql.DataFrameReader = org.apache.spark.sql.DataFrameReader@49c37918
scala> 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.SQLContext
scala> val sqlContext = new SQLContext(sc)
sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@fdf029a
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()
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)
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[数学分析]
[高等代数]
[大学物理]
[计算机原理]
[电磁学]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
[计算机软件与理论]
[计算机系统结构]
[操作系统]
[概率统计]
[汇编语言]
[数据结构]
spark SQL学习(spark连接 mysql)的更多相关文章
- IDEA 中Spark SQL通过JDBC连接mysql数据库
一.IDEA装驱动: 1.下载一个MySQL的JDBC驱动:mysql-connector-java-5.1.44.tar.gz2.在idea Open Moudle Settings 在 Moudl ...
- spark SQL学习(认识spark SQL)
spark SQL初步认识 spark SQL是spark的一个模块,主要用于进行结构化数据的处理.它提供的最核心的编程抽象就是DataFrame. DataFrame:它可以根据很多源进行构建,包括 ...
- spark SQL学习(spark连接hive)
spark 读取hive中的数据 scala> import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql. ...
- spark SQL学习(综合案例-日志分析)
日志分析 scala> import org.apache.spark.sql.types._ scala> import org.apache.spark.sql.Row scala&g ...
- spark SQL学习(案例-统计每日销售)
需求:统计每日销售额 package wujiadong_sparkSQL import org.apache.spark.sql.types._ import org.apache.spark.sq ...
- spark SQL学习(案例-统计每日uv)
需求:统计每日uv package wujiadong_sparkSQL import org.apache.spark.sql.{Row, SQLContext} import org.apache ...
- spark SQL学习(数据源之json)
准备工作 数据文件students.json {"id":1, "name":"leo", "age":18} {&qu ...
- spark SQL学习(数据源之parquet)
Parquet是面向分析型业务得列式存储格式 编程方式加载数据 代码示例 package wujiadong_sparkSQL import org.apache.spark.sql.SQLConte ...
- spark SQL学习(load和save操作)
load操作:主要用于加载数据,创建出DataFrame save操作:主要用于将DataFrame中的数据保存到文件中 代码示例(默认为parquet数据源类型) package wujiadong ...
随机推荐
- dstat命令--检查linux系统性能
系统性能的相关工具:vmstat.netstat.iostat.ifstat. dstat命令可以查看虚拟内存.网络连接和接口.cpu活动.输入/输出设备等.
- 【转】UML中类与类之间的5种关系表示
一.继承关系 继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extends明确标识,在设计时一 ...
- BitTrex行情查看与技术指标系统
上个月的时候,向TradingView申请K线图行情插件,填了各种资料,被问了N多问题,结果却仍是不愿意提供插件给我们. 于是,我们自己开发了一个BitTre行情查看与技术指标系统, 这套系统被国内多 ...
- Yii框架2.0的过滤器
过滤器是 控制器 动作 执行之前或之后执行的对象. 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容. 过滤器可包含 ...
- Cyclic Nacklace ---hdu3746(循环节,kmp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 给你一个字符串,让你在后面加尽量少的字符,使得这个字符串成为一个重复串. abca---添加bc ...
- #define宏定义
1 #define的概念 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 该命令有两种格式:一种是简单的宏定义, ...
- python常见模块之time模块
一.模块简介 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(tim ...
- java并发深入
对象由数据+行为组成.数据就是字段,行为就是方法. 并发须要保证这些可被多个线程訪问的共享对象数据的完整性,以及某些特定完整性语义. 比方一个类有一个字段count=0,两个线程同一时候对它做加1操作 ...
- 004-hadoop家族概述
hadoop家族 名称 简介 Hadoop 分布式基础架构 Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了 ...
- sql中的连接表达式,视图,事务等。
给定两张表 表A ),description )); ,'N1','AD1'); ,'N2','AD2'); mysql> SELECT * FROM a; +----+------+----- ...