写在前面:

当得到一个DataFrame对象之后,可以使用对象提供的各种API方法进行直接调用,进行数据的处理。

  // =====基于dataframe的API=======之后的就都是DataFrame 的操作了==============
infoDF.show()
infoDF.filter(infoDF.col("age") > 30).show()

另,也可以将DataFrame对象通过createOrReplaceTempView()方法,将其转为一张表,从而使用SQL来进行数据处理。

    // ======基于SQL的API===========DataFrame 创建为一张表================
infoDF.createOrReplaceTempView("infos")
spark.sql("select * from infos where age > 30").show()

主要介绍一下API的基本操作,因为SQL的话,写法和传统的基本没差。

DEMO1

package february.sql

import org.apache.spark.sql.SparkSession

/**
* Description: DataFrame API基本操作 直接读取Json文件为DataFrame对象
*
* @Author: 留歌36
* @Date: 2019/2/24 17:54
*/
object DataFrameApp {
def main(args: Array[String]): Unit = {
// Spark SQL的入口点是:SparkSession
val spark = SparkSession.builder()
.appName(this.getClass.getSimpleName)
.master("local[2]")
.getOrCreate()
// 将json文件加载成一个DataFrame
val DF = spark.read.format("json").load("f:\\user.json") // 输出dataframe对应的schema的信息
DF.printSchema() // 输出数据集的前20条数据
DF.show() // 查询某几列所有的数据:select name from table
DF.select("name").show() // 查询某几列的所有数据,并对列进行计算:select name, age+10 from table;
DF.select(DF.col("name"), (DF.col("age")+10).as("age2")).show() // 根据某一列的值,进行过滤。select * from table where age > 21
DF.filter(DF.col("age") > 21).show() // 根据某一列进行分组,然后再进行聚合 select age,count(1) from table group by age
DF.groupBy("age").count().show() spark.stop() } }

DEMO2

package february.sql

import february.sql.DataFrameRDDApp.Info
import org.apache.spark.sql.SparkSession /**
* Description: DataFrame中的其他操作 读取TXT文件为RDD,再反射隐式转换为DataFrame对象
*
* @Author: 留歌36
* @Date: 2019/2/25 19:31
*/
object DataFrameCase {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().appName(this.getClass.getSimpleName).master("local[2]").getOrCreate() // RDD => DataFrame
val textFile = spark.sparkContext.textFile("f:\\users.txt")
textFile.foreach(println)
// 注意这里的隐私转换,split("\\|") 竖线需要转义
import spark.implicits._
val DF = textFile.map(_.split("\\|")).map(line => Student(line(0).toInt, line(1), line(2), line(3))).toDF() DF.show()
// show 方法默认只显示前20条记录,show()在这里被重载了很多次
DF.show(30)
DF.show(30,false) //不隐藏其余的
// 返回前10条记录
DF.take(10).foreach(println)
DF.first()
DF.head(5)
DF.select("name","phone").show(30,false)
//name字段为空或NULL的过滤出来
DF.filter("name='' OR name='NULL'").show()
// name 以M开头的
DF.filter("SUBSTR(name,0,1)='留'").show() // 排序的使用,几种传递参数的方式
DF.sort(DF.col("name").desc).show() //降序
DF.sort(DF("name")).show()
DF.sort("name").show()
// 排序升级操作
DF.sort("name", "id").show()
DF.sort(DF("name").asc, DF("id").desc).show() //name的升序,id的降序
// 修改查询的列名(别名的使用)
DF.select(DF("name").as("stuent_name")).show() // join 操作
val DF2 = textFile.map(_.split("\\|")).map(line => Student(line(0).toInt, line(1), line(2), line(3))).toDF()
// 默认内连接
val joinDF = DF.join(DF2, DF("id") === DF2("id")) joinDF.show() //查看所有的内置函数
// spark.sql("show functions").show(1000)
spark.stop() }
case class Student(id: Int, name: String, phone: String,email: String) }

更多相关小demo:每天一个程序:https://blog.csdn.net/liuge36/column/info/34094

基于API和SQL的基本操作【DataFrame】的更多相关文章

  1. 且谈 Apache Spark 的 API 三剑客:RDD、DataFrame 和 Dataset

    作者:Jules S. Damji 译者:足下 本文翻译自 A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets ,翻译已 ...

  2. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

  3. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  4. 基于iSCSI的SQL Server 2012群集测试(四)--模拟群集故障转移

    6.模拟群集故障转移 6.1 模拟手动故障转移(1+1) 模拟手动故障转移的目的有以下几点: 测试群集是否能正常故障转移 测试修改端口是否能同步到备节点 测试禁用full-text和Browser服务 ...

  5. 数据库 基于索引的SQL语句优化之降龙十八掌(转)

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...

  6. 基于oracle的sql优化

    [基于oracle的sql优化] 基于oracle的sql优化 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 一.编写初衷描述 在应有系统开发初期,由于数据库 ...

  7. 转://从一条巨慢SQL看基于Oracle的SQL优化

    http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从 ...

  8. 2019年5月1日起安卓应用应基于API 26开发,那么API等级是啥?

    2019年5月1日起安卓应用应基于API 26开发,那么API等级是啥? 转 https://www.ithome.com/html/android/372234.htm   据泰尔终端实验室公众微信 ...

  9. 基于时间的 SQL注入研究

    SQL注入攻击是业界一种非常流行的攻击方式,是由rfp在1998年<Phrack>杂志第54期上的“NT Web Technology Vulnerabilities”文章中首次提出的.时 ...

随机推荐

  1. Filter(过滤器)(有待补充)

    Filter(过滤器) 一.Filter(过滤器)简介 Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的 ...

  2. 如何理解JS中this指向的问题

    首先,用一句话解释this,就是:指向执行当前函数的对象. 当前执行,理解一下,也就是说this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定.this到底指向谁?this的最终指向的 ...

  3. js中尺寸类样式

    js中尺寸类样式 一:鼠标尺寸类样式 都要事件对象的配合 Tip:注意与浏览器及元素尺寸分开,鼠标类尺寸样式都是X,Y,浏览器及元素的各项尺寸时Height,Width 1:检测相对于浏览器的位置:e ...

  4. ResourceManager基本职能和内部架构

    YARN也采用了Master/Slave结构,其中,Master实现为ResourceManager,负责整个集群资源的管理与调度:Slave实现为NodeManager,负责单个节点的资源管理与任务 ...

  5. 【数据库】MySQL 函数大全包含示例(涵盖了常用如时间、数字、字符串处理、数据流函数的和一些冷门的)

    ps:博客园markdown不能自动生成列表,更好的阅读体验可访问我的个人博客http://www.isspark.com/archives/mysqlFunctionDesc 数学函数(Mathem ...

  6. 过滤掉Abp框架不需要记录的日志

    该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇. 问题 ABP.WindowsService/Demo.MyJob/4.0.0该项目不仅 ...

  7. leetcode 刷题记录(java)-持续更新

    最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...

  8. NLP(四) 正则表达式

    * + ? * :0个或多个 + :1个或多个 ? :0个或1个 re.search()函数,将str和re匹配,匹配正确返回True import re # 匹配函数,输入:文本,匹配模式(即re) ...

  9. odoo12从零开始:一、安装odoo运行环境(mac)

    写在前面: 接触odoo已经两年多了,在大学做课程设计的时候,无意间了解到odoo这个erp框架,当时的odoo在国内还默默无闻,我也不曾想过自己毕业后会从事到odoo框架的相关开发工作中来.两年多的 ...

  10. 【selenium】- webdriver常见元素定位(上)

    本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1. 元素的定位 2.By.id 打开Firefox,打开百度首页,右键点击选择“使用Firebug”查看元素. 点击红框内的按钮,将鼠标指针 ...