一、环境准备

安装oracle后,创建测试表、数据:


  1. create table test (
  2. username varchar2(32) primary key ,
  3. password varchar2(32)
  4. );
  5. insert into test values('John','1234');
  6. insert into test values('Mike','1234');
  7. insert into test values('Jim','1234');
  8. insert into test values('Ana','1234');
  9. insert into test values('Ennerson','1234');
  10. commit;

二、实现代码

1、建立JDBC连接读取数据


  1. SparkConf sparkConf = new SparkConf().setAppName("JavaSparkSQL").setMaster("local[6]");
  2. JavaSparkContext jsc = new JavaSparkContext(sparkConf);
  3. SQLContext sqlContext = new SQLContext(jsc);
  4. Map<String, String> options = new HashMap<String, String>();
  5. options.put("url", "jdbc:oracle:thin:@192.168.168.100:1521/orcl");
  6. options.put("user", "flume");
  7. options.put("password","1234");
  8. //读取test表
  9. options.put("dbtable", "test");
  10. Dataset<Row> df = sqlContext.read().format("jdbc").options(options).load();
  11. df.show();
  12. /*+--------+--------+
  13. |USERNAME|PASSWORD|
  14. +--------+--------+
  15. |    John|    1234|
  16. |    Mike|    1234|
  17. |     Jim|    1234|
  18. |     Ana|    1234|
  19. |Ennerson|    1234|
  20. +--------+--------+*/

2、遍历Dataset<Row>集合


  1. //遍历Dataset<Row>集合
  2. List<Row> list = df.collectAsList();
  3. //读取test表中username字段的数据
  4. for(int i = 0;i < list.size();i++){
  5. System.out.println(list.get(i).<String>getAs("USERNAME"));
  6. }
  7. /*John
  8. Mike
  9. Jim
  10. Ana
  11. Ennerson*/

3、执行SQL语句


  1. //执行sql语句
  2. //一定要有df.createOrReplaceTempView("test"); 否则会报
  3. //“Exception in thread "main" org.apache.spark.sql.AnalysisException: Table or view not found: test; line 1 pos 0”
  4. df.createOrReplaceTempView("test");
  5. sqlContext.sql("insert into test values('Obama','6666')");

4、引入spark-sql依赖包

在pom.xml文件中引入sparksql依赖包


  1. <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql_2.11 -->
  2. <dependency>
  3. <groupId>org.apache.spark</groupId>
  4. <artifactId>spark-sql_2.11</artifactId>
  5. <version>2.1.1</version>
  6. <scope>runtime</scope>
  7. </dependency>

三、No suitable driver解决

1、在Eclipse上运行报Exception in thread "main" java.sql.SQLException: No suitable driver错误:


  1. 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文件如下:


  1. <!-- oracle jdbc驱动 -->
  2. <dependency>
  3. <groupId>com.oracle</groupId>
  4. <artifactId>ojdbc5</artifactId>
  5. <version>11.2.0.1.0</version>
  6. <scope>runtime</scope>
  7. </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错误:


  1. Exception in thread "main" java.sql.SQLException: No suitable driver
  2. at java.sql.DriverManager.getDriver(DriverManager.java:315)
  3. at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84)
  4. at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$7.apply(JDBCOptions.scala:84)
  5. at scala.Option.getOrElse(Option.scala:121)
  6. at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:83)
  7. at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions.<init>(JDBCOptions.scala:34)
  8. at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:32)
  9. at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330)
  10. at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
  11. at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:125)
  12. at com.spark.main.JavaLocalDirectKafkaSparkSQLCarNumber.main(JavaLocalDirectKafkaSparkSQLCarNumber.java:117)
  13. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  14. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  15. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  16. at java.lang.reflect.Method.invoke(Method.java:498)
  17. at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:743)
  18. at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187)
  19. at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212)
  20. at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126)
  21. at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

  1. cd /usr/local/spark/spark-2.1.1-bin-hadoop2.7;
  2. bin/spark-submit \
  3. --master spark://master:7077 \
  4. --class "com.spark.main.JavaLocalDirectKafkaSparkSQLCarNumber" \
  5. myApp/test-0.0.1-SNAPSHOT-jar-with-dependencies.jar;

需要在spark集群环境上,指定对应的jdbc驱动包:--driver-class-path myApp/ojdbc5.jar \


  1. cd /usr/local/spark/spark-2.1.1-bin-hadoop2.7;
  2. bin/spark-submit \
  3. --driver-class-path myApp/ojdbc5.jar \
  4. --master spark://master:7077 \
  5. --class "com.spark.main.JavaLocalDirectKafkaSparkSQLCarNumber" \
  6. myApp/test-0.0.1-SNAPSHOT-jar-with-dependencies.jar;

再次运行,成功!!!

sparkSQL以JDBC为数据源的更多相关文章

  1. Spark-2.3.2 Java SparkSQL的自定义HBase数据源

    由于SparkSQL不支持HBase的数据源(HBase-1.1.2),网上有很多是采用Hortonworks的SHC,而SparkSQL操作HBase自定义数据源大多数都是基于Scala实现,我就自 ...

  2. Spring JDBC配置数据源

    在本系列教程中,使用的的是MySQL数据库,并创建一个数据库实例:test,在这个数据库实例:test中创建一个表student.如果您使用任何其他数据库,则可以相应地更改DDL和SQL查询,这问题不 ...

  3. 【Spring JDBC】数据源配置(二)

    一.Spring内置数据源 1. 创建Maven Project,修改pom.xml <properties> <!-- JDK版本 --> <java.version& ...

  4. 6_1.springboot2.x整合JDBC与数据源配置原理解析

    1.引言 对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合 Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置.引入各种xxxTemplate,x ...

  5. spring jdbc 配置数据源连接数据库

    概述 在XML配置数据源,并将数据源注册到JDBC模板 JDBC模板关联业务增删改查 在XML配置数据源 <?xml version="1.0" encoding=" ...

  6. spark sql 以JDBC为数据源

    一.环境准备: 安装mysql后,进入mysql命令行,创建测试表.数据: 将 mysql-connector-java 的jar文件拷贝到 \spark_home\lib\下,你可以使用最新版本,下 ...

  7. SparkSQL JDBC和JDBCServer区别

    注意SparkSQL JDBC和SparkSQL JDBCSever是完全两种不同的场景. SparkSQL JDBC SparkSQL可以使用JDBC的方式访问其他数据库,和普通非spark程序访问 ...

  8. Spark SQL External Data Sources JDBC官方实现读测试

    在最新的master分支上官方提供了Spark JDBC外部数据源的实现,先尝为快. 通过spark-shell测试: import org.apache.spark.sql.SQLContext v ...

  9. SparkSql官方文档中文翻译(java版本)

    1 概述(Overview) 2 DataFrames 2.1 入口:SQLContext(Starting Point: SQLContext) 2.2 创建DataFrames(Creating ...

随机推荐

  1. SQL注入之Sqli-labs系列第七篇(基于root权限读写注入)

    开始挑战第一关(Error Based- String) 开始之前,先介绍这关需要用到的几个函数,如下图 继续访问我们的地址,输入' “ 一些测试语句发现都没有反应 查看源码,是采用了单引号和双括号 ...

  2. TensorRT caffemodel serialize

    1.TensorRT的需要的文件 需要的基本文件(不是必须的) 1>网络结构文件(deploy.prototxt) 2>训练的权重模型(net.caffemodel) TensorRT 2 ...

  3. 【Java】输出目录结构

    import java.io.*; import java.io.File; import java.io.IOException; public class FileUtil { public st ...

  4. 关于Nor Flash、Nand Flash等等

    [Nor Flash] Nor Flash的“读取”和RAM很类似,只要能能够提供数据的地址,数据总线就能够正确的给出数据,但不可以直接进行“写”操作: Nor Flash的写操作,需要遵循特定的命令 ...

  5. c#网站文件下载次数统计

    参考:http://q.cnblogs.com/q/17954/ 项目中需要准确记录文件的下载次数,和帖子的要求差不多. 参考了帖子中推荐的链接,问题得到了有效控制. 大概方法:逐字节(大小可以自己控 ...

  6. Unity3d mesh合并,网格合并具体用法教程

    Unity开发Mesh合并网格 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...

  7. SEO : 建站注意

    1.url格式.尽可能的短一些,实践证明,较短的url格式还是比较利于搜索引擎收录的. 2.网站前台要纯静态.虽然搜索引擎对静态页面和动态页面并没有本质上的差别对待,但是实践告诉我们静态页面对服务器的 ...

  8. 51Nod 1240:莫比乌斯函数

    1240 莫比乌斯函数  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使 ...

  9. Thread sleep() wait()

    学艺不精,先总结一下两者的区别: 对比项 wait sleep 类所属 Object Thread,static方法 使用 在synchronised block中(包括notify,notifyAl ...

  10. this语句的知识点第五点

    对不起大家久等了 最后一点 第五点 给元素中的某一个事件绑定方法,当事件触发时,执行绑定的方法,方法中的this指向当前元素. funciton fn(){ console.log(this) } d ...