【Spark】DataFrame关于数据常用操作
DSL语法
概述
1.查看全表数据 —— DataFrame.show
2.查看部分字段数据(有4种方法)
(1) DataFrame.select("字段名称").show
(2) DataFrame.select($"字段名称").show(推荐)
(3) DataFrame.select(col("字段名称")).show
(4) DataFrame.select(DataFrame.col("字段名称")).show
如果要查询多个字段,方法一样,后面跟着添加字段即可
3.打印schema信息 —— DataFrame.printSchema
4.查询多个字段,并对其中一个字段的值做+1的操作 —— DataFrame.select($"字段名称1",$"字段名称2",$"字段名称2" + 1)
5.过滤,拿到想要的数据 —— DataFrame.filter(条件).show
6.数据分组并计数 —— DataFrame.groupBy("字段名称").count().show
实例操作
// 查询全表数据
scala> personDF.show
+---+--------+---+
| id| name|age|
+---+--------+---+
| 1|zhangsan| 20|
| 2| lisi| 29|
| 3| wangwu| 25|
| 4| zhaoliu| 30|
| 5| tianqi| 35|
| 6| kobe| 40|
+---+--------+---+
// 查询部分字段
// 方法一
scala> personDF.select(personDF.col("name")).show
+--------+
| name|
+--------+
|zhangsan|
| lisi|
| wangwu|
| zhaoliu|
| tianqi|
| kobe|
+--------+
//方法二
scala> personDF.select(col("name")).show
+--------+
| name|
+--------+
|zhangsan|
| lisi|
| wangwu|
| zhaoliu|
| tianqi|
| kobe|
+--------+
//方法三
scala> personDF.select($"name").show
+--------+
| name|
+--------+
|zhangsan|
| lisi|
| wangwu|
| zhaoliu|
| tianqi|
| kobe|
+--------+
//方法四
scala> personDF.select("name").show
+--------+
| name|
+--------+
|zhangsan|
| lisi|
| wangwu|
| zhaoliu|
| tianqi|
| kobe|
+--------+
// 打印schema信息
scala> personDF.printSchema
root
|-- id: integer (nullable = false)
|-- name: string (nullable = true)
|-- age: integer (nullable = false)
// 查询所有的name和age,并将age+1
scala> personDF.select($"name",$"age",$"age"+1).show
+--------+---+---------+
| name|age|(age + 1)|
+--------+---+---------+
|zhangsan| 20| 21|
| lisi| 29| 30|
| wangwu| 25| 26|
| zhaoliu| 30| 31|
| tianqi| 35| 36|
| kobe| 40| 41|
+--------+---+---------+
// 过滤age大于等于25的,使用filter方法过滤
scala> personDF.filter($"age" > 25).show
+---+-------+---+
| id| name|age|
+---+-------+---+
| 2| lisi| 29|
| 4|zhaoliu| 30|
| 5| tianqi| 35|
| 6| kobe| 40|
+---+-------+---+
// 按年龄进行分组并统计相同年龄的人数
scala> personDF.groupBy($"age").count.show
+---+-----+
|age|count|
+---+-----+
| 20| 1|
| 40| 1|
| 35| 1|
| 25| 1|
| 29| 1|
| 30| 1|
+---+-----+
SQL语法
概述
首先有一个必要的操作,就是把DataFrame注册成为一张table —— DataFrame.registerTmpTable("tbl_name")
然后用该格式填入sql语句即可 —— spark.sql("sql语句").show
实例操作
// 注册临时表
scala> personDF.registerTempTable("person")
warning: there was one deprecation warning; re-run with -deprecation for details
// 全表查询
scala> spark.sql("select * from person").show
+---+--------+---+
| id| name|age|
+---+--------+---+
| 1|zhangsan| 20|
| 2| lisi| 29|
| 3| wangwu| 25|
| 4| zhaoliu| 30|
| 5| tianqi| 35|
| 6| kobe| 40|
+---+--------+---+
// 以name和age分组,查询年龄大于25岁的数据
scala> spark.sql("select name,age from person where age > 25 group by name,age").show
+-------+---+
| name|age|
+-------+---+
| lisi| 29|
| kobe| 40|
|zhaoliu| 30|
| tianqi| 35|
+-------+---+
【Spark】DataFrame关于数据常用操作的更多相关文章
- python大规模数据处理技巧之一:数据常用操作
面对读取上G的数据,python不能像做简单代码验证那样随意,必须考虑到相应的代码的实现形式将对效率的影响.如下所示,对pandas对象的行计数实现方式不同,运行的效率差别非常大.虽然时间看起来都微不 ...
- Spark中RDD的常用操作(Python)
弹性分布式数据集(RDD) Spark是以RDD概念为中心运行的.RDD是一个容错的.可以被并行操作的元素集合.创建一个RDD有两个方法:在你的驱动程序中并行化一个已经存在的集合:从外部存储系统中引用 ...
- Excel数据常用操作,vlookup,text,trim,数据格式导致出错
数据有缺漏,需要在数据前面补零 =TEXT(F70,"000000") 前面是要操作的数据,后面是补几位 匹配数据(将一个表格中的数据进行匹配) =VLOOKUP(C2,aaa,4 ...
- Oracle数据常用操作
将用逗号隔开字段拆分成两行: select * from mp_fs_file_info a,dm_process_upload b where instr(b.attachment,a.file_i ...
- Json数据常用操作
JSON字符串: var str1 = '{ "name": "cs", "sex": "man" }'; JSON对象 ...
- 大数据学习day25------spark08-----1. 读取数据库的形式创建DataFrame 2. Parquet格式的数据源 3. Orc格式的数据源 4.spark_sql整合hive 5.在IDEA中编写spark程序(用来操作hive) 6. SQL风格和DSL风格以及RDD的形式计算连续登陆三天的用户
1. 读取数据库的形式创建DataFrame DataFrameFromJDBC object DataFrameFromJDBC { def main(args: Array[String]): U ...
- spark dataframe操作集锦(提取前几行,合并,入库等)
https://blog.csdn.net/sparkexpert/article/details/51042970 spark dataframe派生于RDD类,但是提供了非常强大的数据操作功能.当 ...
- spark 学习_rdd常用操作
[spark API 函数讲解 详细 ]https://www.iteblog.com/archives/1399#reduceByKey [重要API接口,全面 ] http://spark.apa ...
- spark DataFrame 常见操作
spark dataframe派生于RDD类,但是提供了非常强大的数据操作功能.当然主要对类SQL的支持. 在实际工作中会遇到这样的情况,主要是会进行两个数据集的筛选.合并,重新入库. 首先加载数据集 ...
随机推荐
- Zipper 杭电 1501
Given three strings, you are to determine whether the third string can be formed by combining the ch ...
- A - Chat Group Gym-101775A
题目连接:https://codeforces.com/gym/101775/problem/A 题解:就是累加组合数 但是直接由K累加到N肯定会TLE ,所以我们不妨判断不能组成group的情况,即 ...
- 原创hadoop2.6.4 namenode HA+Federation集群高可用部署
今天下午刚刚搭建了一个高可用hadoop集群,整理如下,希望大家能够喜欢. namenode HA:得有两个节点,构成一个namenode HA集群 namenode Federation:可以有 ...
- Vue自定义指令 数据传递
在项目开发过程中,难免会遇到各种功能需要使用Vue自定义指令--directive 去实现 .关于directive的使用方式这里就不做过多的介绍了,Vue官方文档中说的还是听明白的.今天讲讲在使用V ...
- TensorFlow的模型保存与加载
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf #tensorboard --logdir=&qu ...
- Java ASM学习(2)
1.编译后的方法区,其中存储的代码都是一些字节码指令 2.Java虚拟机执行模型: java代码是在一个线程内部执行,每个线程都有自己的执行栈,栈由帧组成,每个帧表示一个方法的调用,每调用一个方法,都 ...
- auth权限逻辑
下面本人为大家讲解一下如何实现auth权限, 第一步,新建Auth.php,复制下面的代码,把注释中的表都创建一下.把文件放到extend新建文件夹org放进去即可, <?php // +--- ...
- 安装 wbemcli
安装环境 建立自己的目录后, wget http://vault.centos.org/6.0/os/x86_64/Packages/sblim-wbemcli- ...
- 设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!
忙,真忙 点赞再看,养成习惯,微信搜索『程序通事』,关注就完事了! 点击查看更多精彩的文章 这两个星期真是巨忙,年前有个项目因为各种莫名原因,一直拖到这个月才开始真正测试.然后上周又接到新需求,马不停 ...
- java内存模型(JMM)和happens-before
目录 重排序 Happens-Before 安全发布 初始化安全性 java内存模型(JMM)和happens-before 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机, ...