用户:
    方便快速从不同的数据源(json、parquet、rdbms),经过混合处理(json join parquet),
    再将处理结果以特定的格式(json、parquet)写回到指定的系统(HDFS、S3)上去
 
Spark SQL 1.2 ==> 外部数据源API
 
外部数据源的目的
1)开发人员:是否需要把代码合并到spark中????
    weibo
    --jars
 
2)用户
    读:spark.read.format(format)  
        format
            build-in: json parquet jdbc  csv(2+)
            packages: 外部的 并不是spark内置   https://spark-packages.org/
    写:people.write.format("parquet").save("path")        
 
处理parquet数据
 
RuntimeException: file:/home/hadoop/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/people.json is not a Parquet file
 
  val DEFAULT_DATA_SOURCE_NAME = SQLConfigBuilder("spark.sql.sources.default")
    .doc("The default data source to use in input/output.")
    .stringConf
    .createWithDefault("parquet")
 
#注意USING的用法
CREATE TEMPORARY VIEW parquetTable
USING org.apache.spark.sql.parquet
OPTIONS (
  path "/home/hadoop/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/users.parquet"
)
 
SELECT * FROM parquetTable
 
spark.sql("select deptno, count(1) as mount from emp where group by deptno").filter("deptno is not null").write.saveAsTable("hive_table_1")
 
org.apache.spark.sql.AnalysisException: Attribute name "count(1)" contains invalid character(s) among " ,;{}()\n\t=". Please use alias to rename it.;
 
spark.sqlContext.setConf("spark.sql.shuffle.partitions","10")
 
在生产环境中一定要注意设置spark.sql.shuffle.partitions,默认是200
 
操作MySQL的数据:
spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/hive").option("dbtable", "hive.TBLS").option("user", "root").option("password", "root").option("driver", "com.mysql.jdbc.Driver").load()
 
java.sql.SQLException: No suitable driver
 
import java.util.Properties
val connectionProperties = new Properties()
connectionProperties.put("user", "root")
connectionProperties.put("password", "root")
connectionProperties.put("driver", "com.mysql.jdbc.Driver")
 
val jdbcDF2 = spark.read.jdbc("jdbc:mysql://localhost:3306", "hive.TBLS", connectionProperties)
 
CREATE TEMPORARY VIEW jdbcTable
USING org.apache.spark.sql.jdbc
OPTIONS (
  url "jdbc:mysql://localhost:3306",
  dbtable "hive.TBLS",
  user 'root',
  password 'root',
  driver 'com.mysql.jdbc.Driver'
)
 
外部数据源综合案例
create database spark;
use spark;
 
CREATE TABLE DEPT(
DEPTNO int(2) PRIMARY KEY,
DNAME VARCHAR(14) ,
LOC VARCHAR(13) ) ;
 
INSERT INTO DEPT VALUES(10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES(20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES(30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES(40,'OPERATIONS','BOSTON'); 

最新文章

  1. [Tip] 如何在BeyondCompare中忽略不重要的区别.
  2. smarty插件开发代替注册插件方法registerPlugin
  3. 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表
  4. Ⅰ.net通信指前提
  5. IP TCP HTTP Socket的区别
  6. 29个你必须知道的Linux命令
  7. Hackerrank 2020 February 2014 解题报告
  8. Sumblime Text 2 常用插件以及安装方法
  9. BZOJ 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏( floyd )
  10. ASP.NET MVC 使用Uploadify实现多文件异步无刷新上传
  11. Redux源码分析之bindActionCreators
  12. Xamarin.Android 调用Web Api(通过ListView展示远程获取的数据)
  13. java基础:内存分配(上)
  14. #20175204 张湲祯 2018-2019-2《Java程序设计》第五周学习总结
  15. linux的基本操作概览
  16. 启动Jmeter4.0 后弹出命令窗口提示信息是什么意思?
  17. tomcat 启动Spring boot 项目
  18. 072——VUE中vuex之使用mutations修改购物车仓库数据
  19. 利用阿里巴巴封装的FastJSON来解析json并转换成map
  20. MYSQL IO innodb-buffer-pool

热门文章

  1. errors collectiions
  2. 有关于并发中的死锁(Deadlock)、饥饿(Starvation)、活锁(Livelock)
  3. ESP8266 01S WIFI 网络
  4. iframe父页面获取子页面元素方法
  5. 小组团队项目的NABCD分析
  6. Excel VBA 连接各种数据库(一) VBA连接MySQL数据库
  7. Java框架spring 学习笔记(六):属性注入
  8. Could not HEAD 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.0/gradle-3.2.0.pom'.
  9. Node.js的内存问题
  10. CentOS 7 安装与卸载MySQL 5.7