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.mzph.cn/news/629413.shtml

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

相关文章

数据结构之tuple类

前言 tuple 是元组类。tuple 就很有意思了,它和上一篇文章介绍的list 十分相似,都是线性表。最大的不同就是list 可以改变,而tuple 是不可变的。元组就像是列表的补充,我们甚至可以这么理解:元组就是只读的列表。 1.…

一文带你揭秘淘宝终端技术

作者:周杰(寻弦) 在这个数字化迅速发展的时代,技术的每一次飞跃都不仅仅意味着一个产品的升级,更是对未来世界的一次大胆想象。从 PC 到 iPhone,从 Model 3 到 ChatGPT,都引领了全新的一个行业。…

智慧校园大数据平台功能模块

学校概况模块 智慧校园大数据平台的“学校概况”模块,主要给学校和院系领导使用,能够从宏观、全局把控学校教学、管理、科研、资产等各个方面的整体情况,可以预测学校的发展趋势并且给出决策建议。 比如在消费方面,校领导可以看到近一个月的消费金额和地点的情况,也可以…

AttributeError: module ‘openai‘ has no attribute ‘error‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

每日一记:一个windows的bat脚本工具集

最近在工作上遇到要校验文件的问题,例如,下载了一个文件之后,通过查看文件的md5来校验文件是否完整,这个动作在linux上很简单,但在windows上也不难,可以通过 certutil 命令实现,该命令通常可用于…

SpringBoot项目如何优雅的实现操作日志记录

SpringBoot项目如何优雅的实现操作日志记录 前言 在实际开发当中,对于某些关键业务,我们通常需要记录该操作的内容,一个操作调一次记录方法,每次还得去收集参数等等,会造成大量代码重复。 我们希望代码中只有业务相关…

【论文阅读笔记】4篇Disentangled representation learning用于图像分割的论文

4篇应用解耦表示学习的文章,这里只关注如何解耦,更多细节不关注,简单记录一下。 1.Robust Multimodal Brain Tumor Segmentation via Feature Disentanglement and Gated Fusion Chen C, Dou Q, Jin Y, et al. Robust multimodal brain tum…

PDF 文档解除密码

PDF 文档解除密码 1. 文件 -> 文档属性 -> 安全 -> 文档限制摘要2. PDF365References 1. 文件 -> 文档属性 -> 安全 -> 文档限制摘要 密码保护《算法设计与分析基础_第3版.pdf》 2. PDF365 https://www.pdf365.cn/ 免费功能 -> PDF 去密码 开始去除 Re…

wireshark使用教程

目录 windows平台安装Wireshark组件选择Additional TasksPacket CaptureUSB CaptureNpcap Installation Options Ubuntu上安装 Wireshark不使用 sudo 运行 Wireshark 使用GUI抓包使用命令行抓包确定抓取哪个网卡的报文抓取数据包停止抓包设置过滤条件 参考资料 Wireshark 是一款…

保姆级ESP-IDF开发环境搭建

1. 手动安装工具链,命令行方式(windows) 1.1 下载离线安装器 进入乐鑫 ESP-IDF Windows Installer Download 下载页面,选择离线版本工具(网络原因,安装过程中使用github下载会出问题)。 1.2 使…

QGIS全国卫星影像加载插件

我们曾分享过通过在QGIS中加载全国卫星影像的方法。 现在,我们再来分享一个可以加载全国卫星影像的QGIS插件。 如何加载QGIS插件 在QGIS中,选择插件菜单中的管理和安装插件菜单,如下图所示。 插件管理 在显示的界面中,输入“j…

两步解决宝塔面板无法访问(无法访问或拒绝链接)

宝塔面板,突然无法进入,显示“IP拒绝链接”。 使用SSH工具登录服务器 /etc/init.d/bt defaultbt default 命令 宝塔获取登录的默认地址、用户名和登录密码; 重启面板服务 sudo /etc/init.d/bt初始化宝塔选项 漏刻有时

Clickhouse: One table to rule them all!

前面几篇笔记我们讨论了存储海量行情数据的个人技术方案。它们之所以被称之为个人方案,并不是因为性能弱,而是指在这些方案中,数据都存储在本地,也只适合单机查询。 数据源很贵 – 在这个冬天,我们已经听说&#xff0…

Python进程池multiprocessing.Pool

环境: 鲲鹏920:192核心 内存:756G python:3.9 python单进程的耗时 在做单纯的cpu计算的场景,使用单进程核多进程的耗时做如下测试: 单进程情况下cpu的占用了如下,占用一半的核心数: 每一步…

数据结构实战:变位词侦测

文章目录 一、实战概述二、实战步骤(一)逐个比较法1、编写源程序2、代码解释说明(1)函数逻辑解释(2)主程序部分 3、运行程序,查看结果4、计算时间复杂度 (二)排序比较法1…

ADA-YOLO:YOLOv8+注意力+Adaptive Head,mAP提升3%

生物医学图像分析中的目标检测和定位至关重要,尤其是在血液学领域,检测和识别血细胞对于诊断和治疗决策至关重要。虽然基于注意力的方法在各个领域中目标检测方面取得了显著的进展,但由于医学影像数据集的独特挑战,其在医学目标检…

JUC的常见类

目录 Callable ReentrantLock Semaphore CountDownLatch JUC即 java.util.concurrent,其中存放了一些进行多线程编程时有用的类 Callable Callable是一个接口,在我们实现Runnable创建线程时,Runnable关注的是其过程,而不关注…

MySQL实现跨库join查询

MySQL实现跨库join查询 一.同服务器的不同库 只需要在表名前加上db_name select* fromuserdb.user u join orderdb.order o onu.id o.user_id;二.不同服务器的不同库 查看配置 FEDERATED SHOW engines;如果是NO,需要改为YES.默认是NO 在my.ini文件中增加一行,…

Kotlin 进阶

1.lambda 表达式 package com.jmj.myapp.lamdbaimport javax.security.auth.callback.Callbackfun main() {1.test1 {println(this1) }}fun <T> T.test1(callback:T.() -> Unit) {this.callback() }package com.jmj.myapp.lamdbaimport javax.security.auth.callback…

HCIA——11计算机网络分层结构——OSI/ISO、TCP/IP

学习目标&#xff1a; 参考模型 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本…