sparkSQL以JDBC为数据源
一、环境准备
安装oracle后,创建测试表、数据:
- create table test (
- username varchar2(32) primary key ,
- password varchar2(32)
- );
- insert into test values('John','1234');
- insert into test values('Mike','1234');
- insert into test values('Jim','1234');
- insert into test values('Ana','1234');
- insert into test values('Ennerson','1234');
- commit;
二、实现代码
1、建立JDBC连接读取数据
- SparkConf sparkConf = new SparkConf().setAppName("JavaSparkSQL").setMaster("local[6]");
- JavaSparkContext jsc = new JavaSparkContext(sparkConf);
- SQLContext sqlContext = new SQLContext(jsc);
- Map<String, String> options = new HashMap<String, String>();
- options.put("url", "jdbc:oracle:thin:@192.168.168.100:1521/orcl");
- options.put("user", "flume");
- options.put("password","1234");
- //读取test表
- options.put("dbtable", "test");
- Dataset<Row> df = sqlContext.read().format("jdbc").options(options).load();
- df.show();
- /*+--------+--------+
- |USERNAME|PASSWORD|
- +--------+--------+
- | John| 1234|
- | Mike| 1234|
- | Jim| 1234|
- | Ana| 1234|
- |Ennerson| 1234|
- +--------+--------+*/
2、遍历Dataset<Row>集合
- //遍历Dataset<Row>集合
- List<Row> list = df.collectAsList();
- //读取test表中username字段的数据
- for(int i = 0;i < list.size();i++){
- System.out.println(list.get(i).<String>getAs("USERNAME"));
- }
- /*John
- Mike
- Jim
- Ana
- Ennerson*/
3、执行SQL语句
- //执行sql语句
- //一定要有df.createOrReplaceTempView("test"); 否则会报
- //“Exception in thread "main" org.apache.spark.sql.AnalysisException: Table or view not found: test; line 1 pos 0”
- df.createOrReplaceTempView("test");
- sqlContext.sql("insert into test values('Obama','6666')");
4、引入spark-sql依赖包
在pom.xml文件中引入sparksql依赖包
- <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.11 -->
- <dependency>
- <groupId>org.apache.spark</groupId>
- <artifactId>spark-sql_2.11</artifactId>
- <version>2.1.1</version>
- <scope>runtime</scope>
- </dependency>
三、No suitable driver解决
1、在Eclipse上运行报Exception in thread "main" java.sql.SQLException: No suitable driver错误:
- Exception in thread "main" java.sql.SQLException: No suitable driver at java.sql .DriverManager .getDriver(DriverManager.java:315) at org.apache.spark.sql.execution.datasources.jdbc .JDBCOptions$$anonfun$7 .apply(JDBCOptions.scala:84) at org.apache.spark.sql.execution.datasources.jdbc .JDBCOptions$$anonfun$7.apply (JDBCOptions.scala:84) at scala.Option.getOrElse(Option.scala:121 ) at org.apache.spark.sql.execution .datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:83) at org .apache.spark.sql.execution.datasources .jdbc.JDBCOptions.<init>(JDBCOptions.scala:34) at org.apache .spark.sql.execution.datasources.jdbc .JdbcRelationProvider.createRelation(JdbcRelationProvider .scala:32) at org.apache.spark.sql .execution.datasources.DataSource.resolveRelation(DataSource.scala:330 ) at org.apache.spark.sql .DataFrameReader.load(DataFrameReader.scala:152) at org.apache.spark.sql .DataFrameReader.load (DataFrameReader.scala:125) at com.spark.test.JavaSparkSQL.main(JavaSparkSQL.java :26 )
原因是没有引用oracle的jdbc驱动包,配置pom.xml文件如下:
- <!-- oracle jdbc驱动 -->
- <dependency>
- <groupId>com.oracle</groupId>
- <artifactId>ojdbc5</artifactId>
- <version>11.2.0.1.0</version>
- <scope>runtime</scope>
- </dependency>
由于Oracle授权问题,Maven不提供oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库。
具体可以参考:maven添加oracle jdbc依赖
2、在spark集群环境上运行报Exception in thread "main" java.sql.SQLException: No suitable driver错误:
- Exception in thread "main" java.sql.SQLException: No suitable driver
- at java.sql.DriverManager.getDriver(DriverManager.java:315)
- at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84)
- at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84)
- at scala.Option.getOrElse(Option.scala:121)
- at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:83)
- at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:34)
- at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:32)
- at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330)
- at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
- at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:125)
- at com.spark.main.JavaLocalDirectKafkaSparkSQLCarNumber.main(JavaLocalDirectKafkaSparkSQLCarNumber.java:117)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- at java.lang.reflect.Method.invoke(Method.java:498)
- at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:743)
- at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
- at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
- at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
- at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
- cd /usr/local/spark/spark-2.1.1-bin-hadoop2.7;
- bin/spark-submit \
- --master spark://master:7077 \
- --class "com.spark.main.JavaLocalDirectKafkaSparkSQLCarNumber" \
- myApp/test-0.0.1-SNAPSHOT-jar-with-dependencies.jar;
需要在spark集群环境上,指定对应的jdbc驱动包:--driver-class-path myApp/ojdbc5.jar \
- cd /usr/local/spark/spark-2.1.1-bin-hadoop2.7;
- bin/spark-submit \
- --driver-class-path myApp/ojdbc5.jar \
- --master spark://master:7077 \
- --class "com.spark.main.JavaLocalDirectKafkaSparkSQLCarNumber" \
- myApp/test-0.0.1-SNAPSHOT-jar-with-dependencies.jar;
再次运行,成功!!!
sparkSQL以JDBC为数据源的更多相关文章
- Spark-2.3.2 Java SparkSQL的自定义HBase数据源
由于SparkSQL不支持HBase的数据源(HBase-1.1.2),网上有很多是采用Hortonworks的SHC,而SparkSQL操作HBase自定义数据源大多数都是基于Scala实现,我就自 ...
- Spring JDBC配置数据源
在本系列教程中,使用的的是MySQL数据库,并创建一个数据库实例:test,在这个数据库实例:test中创建一个表student.如果您使用任何其他数据库,则可以相应地更改DDL和SQL查询,这问题不 ...
- 【Spring JDBC】数据源配置(二)
一.Spring内置数据源 1. 创建Maven Project,修改pom.xml <properties> <!-- JDK版本 --> <java.version& ...
- 6_1.springboot2.x整合JDBC与数据源配置原理解析
1.引言 对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合 Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置.引入各种xxxTemplate,x ...
- spring jdbc 配置数据源连接数据库
概述 在XML配置数据源,并将数据源注册到JDBC模板 JDBC模板关联业务增删改查 在XML配置数据源 <?xml version="1.0" encoding=" ...
- spark sql 以JDBC为数据源
一.环境准备: 安装mysql后,进入mysql命令行,创建测试表.数据: 将 mysql-connector-java 的jar文件拷贝到 \spark_home\lib\下,你可以使用最新版本,下 ...
- SparkSQL JDBC和JDBCServer区别
注意SparkSQL JDBC和SparkSQL JDBCSever是完全两种不同的场景. SparkSQL JDBC SparkSQL可以使用JDBC的方式访问其他数据库,和普通非spark程序访问 ...
- Spark SQL External Data Sources JDBC官方实现读测试
在最新的master分支上官方提供了Spark JDBC外部数据源的实现,先尝为快. 通过spark-shell测试: import org.apache.spark.sql.SQLContext v ...
- SparkSql官方文档中文翻译(java版本)
1 概述(Overview) 2 DataFrames 2.1 入口:SQLContext(Starting Point: SQLContext) 2.2 创建DataFrames(Creating ...
随机推荐
- django重定向是如何实现的,用的什么状态码?
1,使用HTTPresponseredirect from django,http,import HttpResponseRedirect 2,使用redirct 和reverse 状态码:301和3 ...
- linux 断网 扫描基本命令
kali使用arpspoof命令进行ARP欺骗. 做法是获取目标主机IP镜像流量,再进行ARP欺骗. 此次测试实在局域网中进行,使用kali虚拟机和Windows10物理机测试. 最终效果是利用kal ...
- [转]How rival bots battled their way to poker supremacy
How rival bots battled their way to poker supremacy http://www.nature.com/news/how-rival-bots-battle ...
- /dev/i2c-*不见了
/********************************************************************** * /dev/i2c-*不见了 * 说明: * 能在他的 ...
- git get submodule after clone
/********************************************************************************* * git get submodu ...
- 百练7619-合影效果-2015正式D题-简单排序&输出格式
D:合影效果 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念.如果他们站成一排,男生全部在左(从拍照者的 ...
- 百练1678-整数的个数-2015正式A题
A:整数的个数 总时间限制: 1000ms 内存限制: 65536kB 描述 给定k(1< k < 100)个正整数,其中每个数都是大于等于1,小于等于10的数.写程序计算给定的k个正 ...
- java 彻底理解 byte char short int float long double
遇到过很多关于 数值类型范围的问题了,在这做一个总结,我们可以从多方面理解不同数值类型的所能表示的数值范围 在这里我们只谈论 java中的数值类型 首先说byte: 这段是摘自jdk中 Byte.ja ...
- LeetCode - Daily Temperatures
Given a list of daily temperatures, produce a list that, for each day in the input, tells you how ma ...
- 【java编程】ServiceLoader使用看这一篇就够了
转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...