DataFrame API入门操作及代码展示

news2024/11/25 22:46:09

文章目录

    • DataFrame风格编程
    • DSL风格编程代码示例
      • 相关API
      • 相关代码示例
    • SQL风格编程代码示例
      • 相关API
      • 相关代码
    • Fucntions包
    • 基于SparkSQL的WordCount代码编写

DataFrame风格编程

  • DataFrame支持两种风格进行编程
    • DSL风格
    • SQL风格
  • DSL称之为领域特定语言,其实就是指DataFrame特有的API,DSL风格意思就是以调用API的方式来处理Data。
  • SQL风格就是使用SQL语句处理DataFrame的数据。

DSL风格编程代码示例

相关API

  • show()方法

    • 功能:展示DataFrame中的数据。
    • 语法:df.show(参数1, 参数2)
      • 参数1: 默认是20, 控制展示多少条。
      • 参数2: 是否阶段列, 默认只输出20个字符的长度, 过长不显示, 显示请用truncate = True。
  • printSchema()方法

    • 功能:打印输出df的schema信息。
    • 语法:df.printSchema()
  • select()方法

    • 功能:选择DataFrame中的指定列(通过传入参数进行指定)。
    • 语法:df.select()
      • 参数传递1:可变参数的cols对象,cols对象可以是Column对象来指定列或者字符串列名来指定列。
      • 参数传递2:List[Column]对象或者List[str]对象, 用来选择多个列。
  • filter()与where()方法

    • 功能:过滤DataFrame内的数据,返回一个过滤后的DataFrame,两者方法是等价的。
    • 语法:df.filter()、df.where()
  • groupBy()方法

    • 功能:按照指定的列进行数据的分组, 返回值是GroupedData对象。
    • 语法:df.groupBy()

相关代码示例

# coding : utf8
from pyspark.sql import SparkSession

if __name__ == '__main__':
    ss = SparkSession.builder \
        .appName("test") \
        .master("local[*]") \
        .getOrCreate()
    sc = ss.sparkContext

    df = ss.read.format("csv") \
        .option("sep", ",") \
        .schema("id INT, subject STRING, score INT") \
        .load("../Data/input/stu_score.txt")

    # DSL风格展示
    # Column对象获取
    id_col = df["id"]
    subject_col = df["subject"]
    score_col = df["score"]

    # list形式
    df.select(["id", "subject"]).limit(10).show()
    # 可变参数形式
    df.select("id", "score").limit(10).show()
    # Column对象形式
    df.select(id_col, subject_col).limit(10).show()

    # filter API
    df.filter("score < 99").show()
    df.filter(df["score"] < 99).show()

    # where API
    df.where("score < 99").show()
    df.where(df["score"] < 99).show()

    # groupby API
    df.groupBy("subject").count().show()
    df.groupBy(subject_col).count().show()

    # groupby返回值是GroupedData,不是DataFrame,是一个有分组的数据集合,后面只能是聚合函数
    print(type(df.groupBy(df["subject"])))

SQL风格编程代码示例

相关API

  • DataFrame的一个强大之处就是我们可以将它看作是一个关系型数据表,然后可以通过在程序中使用spark.sql() 来执行SQL语句查询,结果返回一个DataFrame。如果想使用SQL风格的语法,需要将DataFrame注册成表。

  • df.createTempView():注册临时的视图表。

  • df.createOrReplaceTempView():注册或者替换临时的视图表。

  • df.createGlobalTempView():注册全局临时的视图表。

  • 全局表与临时表

    • 全局表:跨SparkSession对象使用,在一个程序的多个SparkSession中均可调用,查询时需要添加前缀:global_temp。
    • 临时表:只在当前的SparkSession中可用。
  • 使用SQL查询我们需要调用SparkSession.sql(“SQL语句”)执行查询,返回值是一个新的DataFrame。

相关代码

# coding : utf8
from pyspark.sql import SparkSession

if __name__ == '__main__':
    ss = SparkSession.builder \
        .appName("test") \
        .master("local[*]") \
        .getOrCreate()
    sc = ss.sparkContext

    df = ss.read.format("csv") \
        .option("sep", ",") \
        .schema("id INT, subject STRING, score INT") \
        .load("../Data/input/stu_score.txt")

    # 注册成临时表
    df.createTempView("score1")
    df.createOrReplaceTempView("score2") # 创建或替换临时视图表
    df.createGlobalTempView("score3")  # 创建全局临时视图表

    ss.sql("SELECT subject, AVG(score) AS  avg_score FROM score1 GROUP BY subject").show()
    ss.sql("SELECT subject, COUNT(*) AS  cnt FROM score2 GROUP BY subject").show()
    ss.sql("SELECT subject, MAX(score) AS max_score , MIN(score) AS  min_score FROM global_temp.score3 GROUP BY subject").show()

Fucntions包

  • PySpark提供了一个函数包:pyspark.sql.functions,这个包里提供了一些列的计算函数供SparkSQL使用最常见的有我们所熟悉的split和explode方法。
  • 导入这个包我们可以通过以下代码来实现:
  from pyspark.sql import functions as F
  • 这些功能函数的返回值多数都是column对象。

基于SparkSQL的WordCount代码编写

# coding : utf8
from pyspark.sql import SparkSession
from pyspark.sql import functions as F

if __name__ == '__main__':
    ss = SparkSession.builder \
        .appName("test") \
        .master("local[*]") \
        .getOrCreate()
    sc = ss.sparkContext

    # TODO: 1 SQL风格处理
    rdd = sc.textFile("hdfs://node1:8020/Test/WordCount.txt") \
        .flatMap(lambda line: line.split(" ")) \
        .map(lambda x: [x])

    df1 = rdd.toDF(["words"])
    df1.createOrReplaceTempView("words")

    ss.sql("SELECT words, COUNT(*) AS cnt FROM words GROUP  BY words ORDER  BY cnt DESC").show()


    # TODO: 2 DSL风格处理
    df2 = ss.read.format("text") \
        .load("hdfs://node1:8020/Test/WordCount.txt")

    # withColumn方法
    # 方法功能: 对已存在的列进行操作, 返回一个新的列, 如果名字和老列相同, 那么替换, 否则作为新列存在
    df3 = df2.withColumn("value", F.explode(F.split(df2["value"], " ")))
    df3.groupBy("value").count() \
        .withColumnRenamed("value", "words") \
        .withColumnRenamed("count", "cnt") \
        .orderBy("cnt", ascending=False).show()
  • 结果展示:
    在这里插入图片描述

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

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

相关文章

Config配置文件读写

配置文件本质上是包含成功操作程序所需信息的文件&#xff0c;这些信息以特定方式构成。它们不是在程序中进行硬编码&#xff0c;而是用户可配置的&#xff0c;通常存储在纯文本文件中。 写配置文件 使用函数WritePrivateProfileStringW写配置文件 BOOL WritePrivateProfile…

filter: grayscale(1); | 网页变灰

效果 MDN: https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter-function/grayscalegrayscale(amount)对图片进行灰度转换转换值的大小&#xff0c;可以是 或 . 当值为 100% 时&#xff0c;灰度最大。0% 时与原图没有区别。0% 到 100% 之间的值会使灰度线性变化。amount …

JVM学习笔记(2)—— 运行时数据区概述及线程

在上一篇中我们讲了JVM的类加载子系统&#xff0c;现在我们就来到了运行时数据区。而不同版本的JVM对于内存的划分方式和管理机制存在着部分差异&#xff08;最典型的就是方法区实现的差异&#xff09;&#xff0c;本文针对经典的Hotspot jvm进行讨论&#xff0c;对运行时数据区…

Mongoose应用和文件上传

一、Express框架访问MongoDB数据库 1、目的&#xff1a; ​ &#xff08;1&#xff09;mongoose模块的使用 ​ &#xff08;2&#xff09;学会代码的封装&#xff1a;dao层、service层、接口层 ​ &#xff08;3&#xff09;MVC设计思想&#xff1a;M(Model)、V(View)、C(C…

WEB前端期末大作业——关于酒店主题网站设计——高级酒店公寓网页(4页)

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

如何使用gitee码云?创建库,克隆远程仓库,上传代码,小绿格等问题

目录 前提软件&#xff1a;先安装Git&#xff0c;再安装TortoiseGit&#xff08;可以在网上找找~默认下一步安装即可&#xff09; 一、访问网站Gitee - 基于 Git 的代码托管和研发协作平台 二、创建库 二、克隆远程仓库到本地电脑 - 仓库与本地链接 三、上传文件到gitee库里…

【Linux基础知识点】内核、系统调用、Shell、指令集、微架构、硬件架构、用户态、内核态、进程、用户线程、内核线程

参考 Linux内核版本和发行版本Linux架构用户态和内核态的简单理解「建议收藏」CPU、操作系统内核、ARM内核与架构的理解【科普】一文看懂指令集是什么一文搞懂X86架构和ARM架构的区别线程和进程的区别是什么&#xff1f;如何理解内核线程、内核进程&#xff1f; 讲解 知识点详…

Linux 业务突然宕机、系统卡死、磁盘空间爆满,该怎么查?

场景 在服务器运维过程中&#xff0c;我们偶尔会发现业务突然宕机&#xff0c;进去服务器发现异常卡顿查看服务器磁盘空间发现磁盘满载。 如何找到占用空间大的目录或文件&#xff1f; 1、比较笨的方法&#xff1a; 在根目录下&#xff0c;du -hs命令&#xff0c;列出各目录…

Redis缓存问题

目录 1、缓存穿透 2、缓存击穿 3、缓存雪崩 ​​​​​​​4、Redis的并发竞争key问题 ​​​​​​​1、缓存穿透 大量请求缓存中和数据库不存在的数据。 大量用户请求缓存中和数据库中不存在的数据&#xff0c;导致所有请求都落到数据库上&#xff0c;造成数据库短时间内承…

GAMES202 Real-Time Global Illumination

文章目录Lecture 7 Real-time Global Illumination (in 3D)RSM &#xff08;Reflective Shadow Maps&#xff09;Lecture 8 Real-time Global Illumination (screen space)LPV (Light Propagation Volumes)VXGI (Voxel Global Illumination)SSAO (Screen Space Ambient Occlusi…

零基础如何入门Web性能测试?

1、目前正在研究jmeter&#xff0c;请问初期做性能&#xff0c;应先从几点做起&#xff1f; Jmeter和LR都是目前性能测试的首选工具&#xff0c;如果你有LR的学习背景&#xff0c;那么Jmeter上手会很快&#xff0c;重点理解线程和进程的概念&#xff0c;流程和LR是类似的。如果…

ISO27001信息安全管理体系具体要求 学习笔记

ISO27001制定背景 ISO27000 从诞生到现在只不过 20 年间的事情&#xff0c;但基本上可以看出一个标准 “源于生活&#xff0c;高于生活”的发展特点&#xff0c;也就是说&#xff0c;一个真正普遍适用并能被普遍接受的标准&#xff0c;必然是能体现相关领域最佳惯例并能为最佳…

这篇文章告诉你视频转音频软件哪个好用,有需自取

大家看过线下的演唱会或livehouse吗&#xff1f;有些歌手会在现场准备一些小彩蛋&#xff0c;例如演唱还未发行的歌&#xff0c;或是歌曲的其它版本&#xff0c;这时候许多歌迷都会纷纷录制下来&#xff0c;以便后续的欣赏观看。 但是每次想听的时候&#xff0c;都得反复的打开…

工业外观设计中色彩如何有效运用

我相信业内很多设计师都在考虑如何在工业产品外观设计中有目的地运用色彩。最近看了一篇关于如何在工业产品中使用色彩的论文&#xff0c;简单地说了一下自己的想法。 一、加工技术应考虑产品外观设计 工业设计师不仅要考虑材料&#xff0c;还要考虑其表面处理及其颜色。因此&a…

抖音变现模式?80%的人都不知道的秘密,三类更适合玩私域的产品

这篇内容关于适合玩私域的三类产品&#xff0c;精简一下让大家可以3分钟看完。不玩悬念&#xff0c;直接上千货。 上一篇在我赢助手小禾呈序上给大家讲了三个变现的建议&#xff0c;以及两种我比较推荐的变现方式。带货和支付费。今天再讲一个主流的变现思路&#xff0c;最后还…

Android Material Design之MaterialButtonToggleGroup(九)

效果图 资源引入 implementation androidx.appcompat:appcompat:1.3.0 implementation com.google.android.material:material:1.4.0属性 属性描述android:id控件Idandroid:layout_width控件长度android:layout_height控件高度app:checkedButton默认选中得按钮idapp:selectio…

物联网毕业设计 单片机家庭气象站设计与实现

文章目录1 简介2 主要器件引脚连接3 实现效果4 部分实现代码1 简介 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学长哦! 这两年开始&#xff0c;各个学校对毕设的要求越来越高&#x…

揭秘你代理商做不起来货卖不出去的原因,探讨其背后的商业逻辑

现在很多代理商&#xff0c;大都是可以归于“个体户”性质。这些也代表了微小型企业&#xff0c;从前期的蓬勃发展&#xff0c;到现在的经营受限&#xff0c;特别是疫情等影响&#xff0c;很多人的经营都处于举步维艰的状态&#xff0c;如果你们现在是代理商&#xff0c;仓库里…

v-charts,点击页面按钮,不能二次重绘,解决方案

v-charts简介&#xff1a; 是基于 Vue2.0 和 Echarts 封装的图标组件&#xff0c;只需要统一提供一种对前后端都友好的数据格式设置简单的配置项&#xff0c;就可以生成常见的图表。 v-charts官方文档&#xff1a;v-charts echarts官方文档&#xff1a;Documentation - Apach…

8个关于 Promise.then 和 Promise.catch 的面试题,一定要掌握

前面&#xff0c;我们要讨论了 Promise 在异步编程中的执行&#xff0c;错过的朋友可以直接点击《10 个 JavaScript Promise 的面试题》这篇文章进行查看。 在今天的文章中&#xff0c;我们将讨论这些核心 API 用于 Promise 对象的用法。 这里我提供了10个代码片段&#xff0…