SparkSQL——DataFrame

DataFrame

  • Dataframe 是什么

    DataFrameSparkSQL中一个表示关系型数据库中 的函数式抽象, 其作用是让 Spark处理大规模结构化数据的时候更加容易. 一般 DataFrame可以处理结构化的数据, 或者是半结构化的数据, 因为这两类数据中都可以获取到 Schema信息. 也就是说 DataFrame中有 Schema信息, 可以像操作表一样操作 DataFrame.

    在这里插入图片描述

    DataFrame 由两部分构成, 一是 row的集合, 每个 row对象表示一个行, 二是描述 DataFrame结构的 Schema

    在这里插入图片描述

    DataFrame支持 SQL中常见的操作, 例如: select, filter, join, group, sort, join

    • code
    @Testdef dataframe1(): Unit = {// 1. 创建 SparkSession 对象val spark = SparkSession.builder().master("local[6]").appName("dataframe1").getOrCreate()// 2. 创建 DataFrameimport spark.implicits._val dataFrame: DataFrame = Seq(Person("zhangsan", 15), Person("lisi", 20)).toDF()// 3. 看看 DataFrame 可以玩出什么什么花样// select name from t where t.age >10dataFrame.where('age > 10).select( 'name).show()}case class Person(name: String, age: Int)
    

    在这里插入图片描述

  • DataFrame 如何创建

    DataFrame如何创建数据集【BeijingPM20100101_20151231_noheader.rar】

    @Testdef dataframe2():Unit = {val spark = SparkSession.builder().master("local[6]").appName("dataframe2").getOrCreate()import spark.implicits._val personList = Seq(Person("zhangsan", 15), Person("lisi", 20))// 创建 DataFrame 的方法// 1.toDFval df1 = personList.toDF()val df2 = spark.sparkContext.parallelize(personList).toDF() // RDD.toDf()// 2. createDatFrameval df3 = spark.createDataset(personList)// 3. read val df4 = spark.read.csv("./dataset/BeijingPM20100101_20151231_noheader.csv")df4.show()}case class Person(name: String, age: Int)
    

    在这里插入图片描述

    在这里插入图片描述

  • DataFrame 操作 (案例)

    DataFrame操作数据集[BeijingPM20100101_20151231.rar]

    需求:查看 PM_Dongsi 每个月的统计数量

    object DataFrameTest {def main(args: Array[String]): Unit = {// 1. 创建SparkSessionval spark = SparkSession.builder().master("local[6]").appName("pm_analysis").getOrCreate()import spark.implicits._// 2. 读取数据集val sourceDF = spark.read.option("header",true) // 把表头读取出来.csv("./dataset/BeijingPM20100101_20151231.csv")//sourceDF.show()//查看DataFrame 的 schema 信息,要意识到 DataFrame 中是有结构信息的,叫做SchemasourceDF.printSchema()// 3. 处理//    1. 选择列//    2. 过滤 NA 的 PM记录//    3. 分组 select year, month, count(PM_Dongsi) from .. where PM_Dongsi != NA group by year, month//    4. 聚合// 4. 得出结论sourceDF.select('year,'month,'PM_Dongsi).where('PM_Dongsi =!= "NA") // 过滤 NA 的 PM记录.groupBy('year,'month).count().show() // action// 是否能支持使用 SQL 语句进行查询println("---------接下来是SQL语句查询的--------------")// 1. 将 DataFrame 注册为临时表sourceDF.createOrReplaceTempView("pm")// 2. 执行查询val resultDF = spark.sql("select year, month, count(PM_Dongsi) from pm where PM_Dongsi != 'NA' group by year,month")resultDF.show()spark.stop()}
    }
    

总结

  1. DataFrame 是一个类似于关系型数据库表的函数式组件
  2. DataFrame 一般处理结构化数据和半结构化数据
  3. DataFrame 具有数据对象的 Schema 信息
  4. 可以使用命令式的 API 操作 DataFrame, 同时也可以使用 SQL 操作 DataFrame
  5. DataFrame 可以由一个已经存在的集合直接创建, 也可以读取外部的数据源来创建

小Tips

一般处理数据都差不多是ETL这个步骤

  • E -> 抽取
  • T -> 处理转换
  • L -> 装载,落地

Spark代码编写的套路:

  • 创建DataFrame Dataset RDD,制造或者读取数据
  • 通过DataFrame Dataset RDD的API来进行数据处理
  • 通过DataFrame Dataset RDD进行数据落地

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/239854.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka系列(四)

本文接kafka三,代码实践kafkaStream的应用,用来完成流式计算。 kafkastream 关于流式计算也就是实时处理,无时间概念边界的处理一些数据。想要更有性价比地和java程序进行结合,因此了解了kafka。但是本人阅读了kafka地官网&#…

【每日一题】2744. 最大字符串配对数目-2024.1.17

题目: 2744. 最大字符串配对数目 给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。 如果字符串 words[i] 与字符串 words[j] 满足以下条件,我们称它们可以匹配: 字符串 words[i] 等于 words[j] 的反转字符…

Pytorch各种Dropout层应用于详解

目录 torch框架Dropout functions详解 dropout 用途 用法 使用技巧 参数 数学理论公式 代码示例 alpha_dropout 用途 用法 使用技巧 参数 数学理论公式 代码示例 feature_alpha_dropout 用途 用法 使用技巧 参数 数学理论 代码示例 dropout1d 用途 用…

Windows无法登录管理路由器故障排查

问题描述 家里的路由器使用拨号上网,路由器DHCP分发IP的范围是192.168.1.0/24。默认使用192.168.1.1管理路由器。然后拨号上网成功后,修改了私网IP的分发范围:192.168.5.1-192.168.5.10。为了防止有人蹭网,只分配的10个IP地址。修…

rust跟我学三:文件时间属性获得方法

图为RUST吉祥物 大家好,我是get_local_info作者带剑书生,这里用一篇文章讲解get_local_info是怎样获得杀毒软件的病毒库时间的。 首先,先要了解get_local_info是什么? get_local_info是一个获取linux系统信息的rust三方库,并提供一些常用功能,目前版本0.2.4。详细介绍地址…

推荐几个Github高星GoLang管理系统

在Web开发领域,Go语言(Golang)以其高效、简洁、高并发等特性逐渐成为许多开发者的首选语言。有许多优秀的Go语言Web后台管理系统,这些项目星星众多,提供了丰富的功能和良好的代码质量。本文将介绍一些GitHub高星的GoLa…

新品新品新品来袭PFA大口试剂瓶100ml

大口瓶,方便清洗,满足颗粒数要求。

excel(vab)删除空行

删除第一、二、三列位空的所有行(8000)行范围以内 代码如下: Sub Macro1()Dim hang As Integer For hang 8000 To 1 Step -1If Sheet1.Cells(hang, 1) "" And Sheet1.Cells(hang, 2) "" And Sheet1.Cells(hang, 3) "&quo…

SDRAM小项目——命令解析模块

简单介绍: 在FPGA中实现命令解析模块,命令解析模块的用来把pc端传入FPGA中的数据分解为所需要的数据和触发命令,虽然代码不多,但是却十分重要。 SDRAM的整体结构如下,可以看出,命令解析模块cmd_decode负责…

民营经济迎来新发展,创维汽车创始人黄宏生谈创业之道

2024年1月15日,上海高金金融研究院民营经济研究中心高净值研究院年度大咖论坛正式召开,多位来自不同行业的优秀民营企业家在本次论坛上分享企业的创新与发展之道。创维集团、创维汽车创始人黄宏生先生作为本次论坛的首位分享嘉宾,为其他奋斗创…

【技术分享】远程透传网关-单网口快速实现三菱 FX3U 网口PLC程序远程上下载

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条,用于实现网络连接和连接PLC一台三菱 FX3U PLC及其编程软件一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡,WIFI联网则将WIFI天线插入USB口) …

Docker部署Traefik结合内网穿透远程访问Dashboard界面

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…

P9852 [ICPC2021 Nanjing R] Windblume Festival 题解(SPJ)

[ICPC2021 Nanjing R] Windblume Festival 单击此处下载原神 题面翻译 给一个长度为 n n n 环形整数序列 a a a, 每次操作可以任意选择一个下标 x x x,令 $ a_x a_x - a_{(x\bmod n)1}$,之后移除 a ( x m o d n ) 1 a_{(x\bmod n)1} a(xmodn)1​…

MDT的驱动管理和自动匹配

在企业的生产环境中,我们经常会遇到在一个公司中,有很多电脑不是同一个品牌的。有DELL, Lenovo等等诸多品牌。 如果是在小的企业或者组织里,计算机型号单一,我们就可以直接导入驱动,然后直接部署到系统里。…

探索Vue3:深入理解响应式语法糖

🚀 欢迎来到我的专栏!专注于Vue3的实战总结和开发实践分享,让你轻松驾驭Vue3的奇妙世界! 🌈✨在这里,我将为你呈现最新的Vue3技术趋势,分享独家实用教程,并为你解析开发中的难题。让我们一起深入Vue3的魅力,助力你成为Vue大师! 👨‍💻💡不再徘徊,快来关注…

代码随想录算法训练营第三十六天|435. 无重叠区间、763.划分字母区间、56. 合并区间

题目&#xff1a;435. 无重叠区间 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:435.无重叠区间 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:static bool cmp(const vector<int>&a, const vector<int>…

Oracle篇—实例中和name相关参数的区别和作用

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

计算机导论07-算法和数据结构

文章目录 算法基础算法及其特性算法的概念算法与程序算法表示 算法的描述自然语言流程图盒图&#xff08;N-S图&#xff09;伪代码程序设计语言 算法评价算法的衡量标准算法的规模时间复杂度空间复杂度 数据结构数据结构的概念数据的逻辑结构数据的存储结构数据的基本操作 常用…

❤ React报错问题分析

❤ React报错问题分析 ❤️ You passed a second argument to root.render(…) but it only accepts one argument. You passed a second argument to root.render(…) but it only accepts one argument. react-dom.development.js:86 Warning: You passed a second argumen…

drools开源规则引擎介绍以及在Centos上的具体部署方案,让你的业务规则能够独立于应用程序本身

Drools是一个基于Java的开源规则引擎&#xff0c;用于处理业务规则和复杂事件处理。它提供了一个声明性的规则语言&#xff0c;允许开发人员定义业务规则&#xff0c;并通过引擎执行这些规则。以下是Drools规则引擎的简介和一些应用场景描述。 Drools规则引擎简介 规则引擎概述…