SparkSQL DataFrames操作
Hive中已经存在emp和dept表:
select * from emp;
+--------+---------+------------+-------+-------------+---------+---------+---------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+--------+---------+------------+-------+-------------+---------+---------+---------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.0 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-2-20 | 1600.0 | 300.0 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-2-22 | 1250.0 | 500.0 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-4-2 | 2975.0 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-9-28 | 1250.0 | 1400.0 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-5-1 | 2850.0 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-6-9 | 2450.0 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-4-19 | 3000.0 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.0 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-9-8 | 1500.0 | 0.0 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-5-23 | 1100.0 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-3 | 950.0 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-3 | 3000.0 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-1-23 | 1300.0 | NULL | 10 |
+--------+---------+------------+-------+-------------+---------+---------+---------+ select * from dept;
+---------+-------------+-----------+
| deptno | dname | loc |
+---------+-------------+-----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+---------+-------------+-----------+
DataFrame常用功能测试:
val hc = new org.apache.spark.sql.hive.HiveContext(sc)
val emp = hc.table("emp") //根据hive表创建DataFrame emp.dtypes.foreach(println) //查看所有字段名称和类型
(empno,IntegerType)
(ename,StringType)
(job,StringType)
(mgr,IntegerType)
(hiredate,StringType)
(sal,DoubleType)
(comm,DoubleType)
(deptno,IntegerType) emp.columns.foreach(println) //查看所有字段名称
empno
ename
job
mgr
hiredate
sal
comm
deptno emp.printSchema //打印schema信息
root
|-- empno: integer (nullable = true)
|-- ename: string (nullable = true)
|-- job: string (nullable = true)
|-- mgr: integer (nullable = true)
|-- hiredate: string (nullable = true)
|-- sal: double (nullable = true)
|-- comm: double (nullable = true)
|-- deptno: integer (nullable = true) emp.explain //查看物理执行计划
== Physical Plan ==
HiveTableScan [empno#0,ename#1,job#2,mgr#3,hiredate#4,sal#5,comm#6,deptno#7], (MetastoreRelation default, emp, None), None emp.show #默认显示20行
empno ename job mgr hiredate sal comm deptno
7369 SMITH CLERK 7902 1980-12-17 800.0 null 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.0 300.0 30
7521 WARD SALESMAN 7698 1981-2-22 1250.0 500.0 30
7566 JONES MANAGER 7839 1981-4-2 2975.0 null 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.0 1400.0 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.0 null 30
7782 CLARK MANAGER 7839 1981-6-9 2450.0 null 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.0 null 20
7839 KING PRESIDENT null 1981-11-17 5000.0 null 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.0 0.0 30
7876 ADAMS CLERK 7788 1987-5-23 1100.0 null 20
7900 JAMES CLERK 7698 1981-12-3 950.0 null 30
7902 FORD ANALYST 7566 1981-12-3 3000.0 null 20
7934 MILLER CLERK 7782 1982-1-23 1300.0 null 10 emp.show(10) #显示指定行数 emp.limit(5).show
emp.head(3)
emp.head #等价于head(1)
emp.first #等价于head(1)
val emp_as = emp.as("emp_as") #别名
emp_as.select("empno","ename","deptno").show #查看指定列:
emp.select("empno","ename","deptno").show
emp.select($"empno",$"ename",$"deptno").show
emp.selectExpr("empno", "ename as name", "substr(ename,0,4)").show #配合udf使用
emp.select($"empno",$"sal"+100).show #给sal加100 #条件过滤:
emp.filter("empno>7698").show
emp.filter($"empno" > 7698).show
emp.where($"empno" > 7698).show #排序:
emp.sort("empno").show #默认升序
emp.sort($"empno").show
emp.sort("empno").show
emp.sort($"empno".desc).show
emp.sort($"deptno", $"empno".desc).show #多字段排序 emp.orderBy($"empno").show
emp.orderBy($"empno".desc).show
emp.orderBy($"deptno", $"empno".desc).show #分组:
emp.groupBy("deptno").count.show
emp.groupBy($"deptno").avg().show #所有的列求平均值
emp.groupBy($"deptno").avg("sal").show #sal列求平均值
emp.groupBy($"deptno").agg("sal"->"max").show #sal取最大
emp.groupBy($"deptno").agg("sal"->"min").show #sal取最小
emp.groupBy($"deptno").agg("sal"->"sum").show #sal求和
emp.groupBy($"deptno").agg("sal"->"avg").show #sal求平均值
#agg中能有的方法有: avg/max/min/sum/count #join:
val dept = hc.table("dept")
dept.show
emp.join(dept,emp.col("deptno") === dept.col("deptno"),"left_outer").show
emp.join(dept,emp.col("deptno") === dept.col("deptno"),"right_outer").show
emp.join(dept,emp.col("deptno") === dept.col("deptno"),"inner").show
emp.join(dept,$"emp.deptno"===$"dept.deptno" ,"inner").select("empno","ename","dname").show
DataFrames结合SQL使用测试:
val emp_dept = emp.join(dept,emp.col("deptno") === dept.col("deptno"),"left_outer")
emp_dept.registerTempTable("emp_dept_temp")
hc.sql("select count(*) from emp_dept_temp").collect
DataFrames结合hive和mysql jdbc external datasource使用测试:
mysql中准备数据:
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`deptno` int(11) NOT NULL DEFAULT '',
`dname` varchar(30) DEFAULT NULL,
`loc` varchar(30) DEFAULT NULL,
PRIMARY KEY (`deptno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `dept` VALUES ('', 'ACCOUNTING', 'NEW YORK');
INSERT INTO `dept` VALUES ('', 'RESEARCH', 'DALLAS');
INSERT INTO `dept` VALUES ('', 'SALES', 'CHICAGO');
INSERT INTO `dept` VALUES ('', 'OPERATIONS', 'BOSTON');
val hc = new org.apache.spark.sql.hive.HiveContext(sc)
val emp = hc.table("emp")
val dept_jdbc = hc.jdbc("jdbc:mysql://hadoop000:3306/hive?user=root&password=root", "dept")
emp.join(dept_jdbc, emp.col("deptno") === dept_jdbc.col("deptno"), "left_outer").show empno ename job mgr hiredate sal comm deptno deptno dname loc
7782 CLARK MANAGER 7839 1981-6-9 2450.0 null 10 10 ACCOUNTING NEW YORK
7839 KING PRESIDENT null 1981-11-17 5000.0 null 10 10 ACCOUNTING NEW YORK
7934 MILLER CLERK 7782 1982-1-23 1300.0 null 10 10 ACCOUNTING NEW YORK
7369 SMITH CLERK 7902 1980-12-17 800.0 null 20 20 RESEARCH DALLAS
7566 JONES MANAGER 7839 1981-4-2 2975.0 null 20 20 RESEARCH DALLAS
7788 SCOTT ANALYST 7566 1987-4-19 3000.0 null 20 20 RESEARCH DALLAS
7876 ADAMS CLERK 7788 1987-5-23 1100.0 null 20 20 RESEARCH DALLAS
7902 FORD ANALYST 7566 1981-12-3 3000.0 null 20 20 RESEARCH DALLAS
7499 ALLEN SALESMAN 7698 1981-2-20 1600.0 300.0 30 30 SALES CHICAGO
7521 WARD SALESMAN 7698 1981-2-22 1250.0 500.0 30 30 SALES CHICAGO
7654 MARTIN SALESMAN 7698 1981-9-28 1250.0 1400.0 30 30 SALES CHICAGO
7698 BLAKE MANAGER 7839 1981-5-1 2850.0 null 30 30 SALES CHICAGO
7844 TURNER SALESMAN 7698 1981-9-8 1500.0 0.0 30 30 SALES CHICAGO
7900 JAMES CLERK 7698 1981-12-3 950.0 null 30 30 SALES CHICAGO
DataFrames结合parquet和mysql jdbc external datasource使用测试:
SparkSQL DataFrames操作的更多相关文章
- Spark记录-SparkSQL远程操作MySQL和ORACLE
1.项目引入mysql和oracle驱动 2.将mysql和oracle驱动上传到hdfs 3.远程调试源代码如下: import org.apache.spark.sql.SQLContext im ...
- 入门大数据---SparkSQL联结操作
一. 数据准备 本文主要介绍 Spark SQL 的多表连接,需要预先准备测试数据.分别创建员工和部门的 Datafame,并注册为临时视图,代码如下: val spark = SparkSessio ...
- spark-sql jdbc操作mysql
SparkConf sparkConf = new SparkConf() .setMaster("local") .setAppName("MySqlTest" ...
- Spark记录-SparkSQL一些操作
scala>val spark=new org.apache.spark.sql.SQLContext(sc) user.json {"age":"45" ...
- SparkSQL——用之惜之
SparkSql作为Spark的结构化数据处理模块,提供了非常强大的API,让分析人员用一次,就会为之倾倒,为之着迷,为之至死不渝.在内部,SparkSQL使用额外结构信息来执行额外的优化.在外部,可 ...
- SparkSQL
Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,并且作为分布式SQL查询引擎的作用. Hive SQL是转换成 ...
- 【大数据】SparkSql学习笔记
第1章 Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和 DataSet,并且作为分布式 ...
- sparkSQL实战详解
摘要 如果要想真正的掌握sparkSQL编程,首先要对sparkSQL的整体框架以及sparkSQL到底能帮助我们解决什么问题有一个整体的认识,然后就是对各个层级关系有一个清晰的认识后,才能真正的 ...
- Spark之 SparkSql、DataFrame、DataSet介绍
SparkSql SparkSql是专门为spark设计的一个大数据仓库工具,就好比hive是专门为hadoop设计的一个大数据仓库工具一样. 特性: .易整合 可以将sql查询与spark应用程序进 ...
随机推荐
- Halcon pick_and_place_scara_stationary_cam.hdev程序学习
此示例显示如何基于由SCARA手眼校准确定的校准信息,使用SCARA机器人执行拾取和放置应用程序. 在第一步骤中,根据模型图像定义形状模型. 然后,基于该形状模型,在每个图像中搜索对象. 对于一个选定 ...
- FZU 1759 欧拉函数 降幂公式
Description Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000 ...
- 前后台数据交互 后台封装数据 json格式
namespace ~.sverIterface { public class EventPlayerInfo { public string name { get; set; } public st ...
- Oracle笔记2-数据库设计
数据库的设计 软件开发的流程:立项->需求分析->概要设计->详细设计->实现->测试->交付->维护 [含数据库设计] 通过需求分析,就可以抽取出关键业务中 ...
- CGGeometry类定义几何元素的结构和操作几何元素的函数。
1.数据类型: CGFloat: 浮点值的基本类型CGPoint: 表示一个二维坐标系中的点CGSize: 表示一个矩形的宽度和高度CGRect: 表示一个矩形的位置和大小 typedef float ...
- kernel/info.c
/* * linux/kernel/info.c * * Copyright (C) 1992 Darren Senn */ /* This implements the sysinfo() syst ...
- java数组引用
public class Arriy { public static void main(String args[]){ int data[]=new int[3]; data[0]=10; data ...
- 2017年1月4日-linux学习
老男孩Linux运维实战培训 1.EmEditor文本编辑工具,我用Notepad++也很好用 2.win32文本比较工具使用技巧,我用svn也很好用 3.安装vmware软件及新建配置虚拟机视频,已 ...
- js中遍历对象的属性和值
今天想看一下js的数组遍历的内容,搜索到了一个关于对象遍历写好的函数,保留一下.以后好用. function allPrpos ( obj ) { // 用来保存所有的属性名称和值 var p ...
- 【ZOJ1003】Crashing Balloon(DFS)
Crashing Balloon Time Limit: 2 Seconds Memory Limit: 65536 KB On every June 1st, the Children's ...