使用 Apache Spark 和 Deequ 分析大数据集

news2024/12/23 18:21:05

在当今的数据驱动环境中,掌握使用 Apache Spark 和 Deequ 对大型数据集进行分析对于任何处理数据分析、SEO 优化或需要深入研究数字内容的类似领域的专业人士来说都至关重要。

Apache Spark 提供处理大量数据所需的计算能力,而 Deequ 提供质量保证层,为所谓的“数据单元测试”设定基准。这种组合可确保业务用户对其数据的完整性充满信心,以便进行分析和报告。

您是否曾经在维护大型数据集的质量方面遇到过挑战,或者发现难以确保分析中使用的数据属性的可靠性?如果是这样,将 Deequ 与 Spark 集成可能是您正在寻找的解决方案。本文旨在指导您完成从安装到实际应用的整个过程,重点是改进您的工作流程和结果。通过探索 Deequ 和 Spark 的功能和优势,您将学习如何在数据项目中有效地应用这些工具,确保您的数据集不仅满足而且超过质量标准。让我们深入研究这些技术如何改变您的数据分析和质量控制方法。

使用 Apache Spark 和 Deequ 进行数据分析简介

深入了解您的数据集在数据分析中至关重要,这就是 Apache Spark 和 Deequ 的亮点。Apache Spark 以其快速处理大型数据集而闻名,这使得这个著名的工具对于数据分析是必不可少的。它的架构擅长有效地处理大量数据,这对于数据剖析至关重要。

Deequ 通过专注于数据质量来补充 Spark。这种协同作用为数据剖析提供了强大的解决方案,允许识别和纠正缺失值或不一致等问题,这些问题对于准确分析至关重要。

究竟是什么让 Deequ 成为确保数据质量的宝贵资产?Deequ 的核心是实现“数据单元测试”,如果您具有软件开发背景,这个概念听起来可能很熟悉。但是,这些测试不适用于代码;它们是为了您的数据。它们允许您设置特定的质量基准,您的数据集在被视为可靠的分析或报告之前必须满足这些基准。

假设您正在处理客户数据。使用 Deequ,您可以轻松设置检查以确保每条客户记录都是完整的,电子邮件地址遵循有效的格式,或者不存在重复的条目。这种审查水平使 Deequ 与众不同——它将数据质量从一个概念转化为可衡量、可实现的目标。

Deequ 与 Apache Spark 的集成利用 Spark 的可扩展数据处理框架,在庞大的数据集中有效地应用这些质量检查。这种组合不仅仅是标记问题;它提供指导更正过程的可操作见解。例如,如果 Deequ 在数据集中检测到大量不完整的记录,您可以调查原因(无论是数据收集中的缺陷还是数据输入中的错误)并进行纠正,从而提高数据的整体质量。

下面是一个高级图表(来源:AWS),说明了 Deequ 库在 Apache Spark 生态系统中的使用情况:

Deequ 库在 Apache Spark 生态系统中的使用

设置 Apache Spark 和 Deequ 以进行数据分析

要开始使用 Apache Spark 和 Deequ 进行数据分析,设置您的环境至关重要。确保已安装 Java 和 Scala,因为它们是运行 Spark 的先决条件,您可以通过 Spark 的官方文档进行验证。

对于在 Spark 上运行的 Deequ,请将库添加到您的构建管理器中。如果您使用的是 Maven,则只需将 Deequ 依赖项添加到 pom.xml 文件中即可。对于 SBT,请将其包含在 build.sbt 文件中,并确保它与 Spark 版本匹配。

Python 用户,您不会被排除在外。PyDeequ 是将 Deequ 的功能集成到 Python 环境中的首选。使用以下命令通过 pip 安装它:

1
pip install pydeequ install pydeequ

安装后,进行快速测试以确保一切顺利:

1
import pydeequ pydeequ
2
3
<span style="color:#aa5500"># Simple test to verify installation</span>
4
print(pydeequ.__version__)(pydeequ.__version__)

此快速测试将打印已安装的 PyDeequ 版本,确认您的设置已准备好运行。通过这些步骤,您的系统现在可以使用 Spark 和 Deeq 执行强大的数据质量检查,为即将到来的项目中的深入数据分析铺平了道路。

使用 Deequ 分析数据的实用指南

使用 Apache Spark 和 Deequ 准备好环境后,您就可以参与数据分析的实际方面了。让我们专注于 Deequ 为数据分析提供的一些关键指标——完整性、唯一性和相关性。

首先是完整性;此指标通过验证数据中是否存在 null 值来确保数据完整性。唯一性识别并消除重复记录,确保数据独特性。最后,Correlation 量化了两个变量之间的关系,从而提供了对数据依赖关系的见解。

假设您有一个来自 IMDb 的数据集,其结构如下:

1
root
2
 |-- tconst: string (nullable = true)|-- tconst: string (nullable = true)
3
 |-- titleType: string (nullable = true)|-- titleType: string (nullable = true)
4
 |-- primaryTitle: string (nullable = true)|-- primaryTitle: string (nullable = true)
5
 |-- originalTitle: string (nullable = true)|-- originalTitle: string (nullable = true)
6
 |-- isAdult: integer (nullable = true)|-- isAdult: integer (nullable = true)
7
 |-- startYear: string (nullable = true)|-- startYear: string (nullable = true)
8
 |-- endYear: string (nullable = true)|-- endYear: string (nullable = true)
9
 |-- runtimeMinutes: string (nullable = true)|-- runtimeMinutes: string (nullable = true)
10
 |-- genres: string (nullable = true)|-- genres: string (nullable = true)
11
 |-- averageRating: double (nullable = true)|-- averageRating: double (nullable = true)
12
 |-- numVotes: integer (nullable = true)|-- numVotes: integer (nullable = true)

我们将使用以下 Scala 脚本来分析数据集。此脚本将应用各种 Deequ 分析器来计算指标,例如数据集的大小、列的完整性和标识符的唯一性。'averageRating''tconst'

1
import com.amazon.deequ.analyzers._ com.amazon.deequ.analyzers._
2
import com.amazon.deequ.AnalysisRunner com.amazon.deequ.AnalysisRunner
3
import org.apache.spark.sql.SparkSession org.apache.spark.sql.SparkSession
4
5
val spark = SparkSession.builder() spark = SparkSession.builder()
6
  .appName("Deequ Profiling Example")appName("Deequ Profiling Example")
7
  .getOrCreate()getOrCreate()
8
9
val data = spark.read.format("csv").option("header", "true").load("path_to_imdb_dataset.csv") data = spark.read.format("csv").option("header", "true").load("path_to_imdb_dataset.csv")
10
11
val runAnalyzer: AnalyzerContext = { AnalysisRunner runAnalyzer: AnalyzerContext = { AnalysisRunner
12
  .onData(data)onData(data)
13
  .addAnalyzer(Size())addAnalyzer(Size())
14
  .addAnalyzer(Completeness("averageRating"))addAnalyzer(Completeness("averageRating"))
15
  .addAnalyzer(Uniqueness("tconst"))addAnalyzer(Uniqueness("tconst"))
16
  .addAnalyzer(Mean("averageRating"))addAnalyzer(Mean("averageRating"))
17
  .addAnalyzer(StandardDeviation("averageRating"))addAnalyzer(StandardDeviation("averageRating"))
18
  .addAnalyzer(Compliance("top rating", "averageRating >= 7.0"))addAnalyzer(Compliance("top rating", "averageRating >= 7.0"))
19
  .addAnalyzer(Correlation("numVotes", "averageRating"))addAnalyzer(Correlation("numVotes", "averageRating"))
20
  .addAnalyzer(Distinctness("tconst"))addAnalyzer(Distinctness("tconst"))
21
  .addAnalyzer(Maximum("averageRating"))addAnalyzer(Maximum("averageRating"))
22
  .addAnalyzer(Minimum("averageRating"))addAnalyzer(Minimum("averageRating"))
23
  .run()run()
24
}
25
26
val metricsResult = successMetricsAsDataFrame(spark, runAnalyzer) metricsResult = successMetricsAsDataFrame(spark, runAnalyzer)
27
metricsResult.show(false).show(false)

执行此脚本会提供 DataFrame 输出,该输出揭示了有关我们数据的几个见解:

从输出中,我们观察到:

  1. 数据集有 7,339,583 行。
  2. 列的完全非重复性和 1.0 的唯一性表示列中的每个值都是唯一的。tconst
  3. 跨度从最小 1 到最大 10,平均为 6.88,标准差为 1.39,突出了数据的评级变化。averageRating
  4. 该列的完整性得分为 0.148 表明,只有大约 15% 的数据集记录具有指定的平均评级。averageRating
  5. 通过 Pearson 相关系数(为 0.01)分析两者之间的关系,表明这两个变量之间没有相关性,符合预期。numVotesaverageRating

这些指标使我们能够获得洞察力,以浏览您的数据集的复杂性,从而支持数据管理中的明智决策和战略规划。

用于数据质量保证的高级应用程序和策略

数据质量保证是一个持续的过程,对于任何数据驱动的运营都至关重要。使用 Deequ 等工具,您可以实施不仅可以检测问题,还可以防止问题的策略。通过对增量数据加载进行数据分析,我们可以检测异常并随着时间的推移保持一致性。例如,利用 Deeq 的 AnalysisRunner,我们可以观察历史趋势并设置检查以捕获与预期模式的偏差。

例如,如果您的 ETL 作业的通常输出约为 700 万条记录,则此计数的突然增加或减少可能是潜在问题的明显迹象。调查此类偏差至关重要,因为它们可能表明数据提取或加载过程存在问题。利用 Deeq 的 Check 功能,您可以验证是否符合预定义的条件,例如预期的记录计数,以自动标记这些问题。

属性唯一性对于数据完整性至关重要,也需要时刻保持警惕。想象一下,发现客户 ID 属性的唯一性得分发生了变化,该属性应该是坚定不移的唯一性。此异常可能表示重复记录或数据泄露。通过使用 Deeq 的唯一性指标进行分析及时检测将帮助您维护数据的可信度。

历史一致性是质量保证的另一个支柱。如果历史上在 1 到 10 之间波动的列突然显示超出此范围的值,这就会引发问题。这是数据输入错误还是用户行为的实际转变?使用 Deequ 进行分析可以帮助您辨别差异并采取适当的措施。可以将其配置为跟踪 的历史分布并提醒您任何异常情况。'averageRating'AnalysisRunner'averageRating'

使用 Deequ 的聚合指标进行异常检测的业务用例

考虑一个业务使用案例,其中某个进程正在爬取网站页面,并且它需要一种机制来识别爬网过程是否按预期工作。为了在此过程中进行异常检测,我们可以使用 Deequ 库来识别特定时间间隔的记录计数,并将其用于高级异常检测技术。例如,抓取是指在 9500 个月内每天在网站上识别 10500 到 2 个页面。在这种情况下,如果抓取范围高于或低于此范围,我们可能希望向团队发出警报。下图显示了网站上看到的页面的每日计算记录计数。

下图显示了网站上看到的页面的每日计算记录计数。

使用基本统计技术,如变化率(记录每天都在变化),可以看到变化总是在零附近振荡,如下图所示。

更改总是在 0 附近振荡

下图显示了变化率的正态分布,根据钟形曲线的形状,很明显,该数据点的预期变化约为 0%,标准差为 2.63%。

下图显示了变化率的正态分布

这表明,对于此网站,页面添加/删除的范围约为 -5.26% 到 +5.25%,置信度为 90%。根据此指标,可以在页面记录计数上设置规则,以便在更改范围未遵循此准则时引发警报。

这是对数据使用统计方法来识别聚合数字异常的基本示例。根据历史数据可用性和季节性等因素,可以使用 Holt-Winters Forecasting 等方法进行有效的异常检测。

Apache Spark 和 Deequ 的融合形成了一个强大的组合,可帮助您提升数据集的完整性和可靠性。通过上面演示的实际应用程序和策略,我们看到了 Deequ 如何不仅识别而且防止异常,从而确保您珍贵数据的一致性和准确性。

因此,如果您想释放数据的全部潜力,我建议您利用 Spark 和 Deequ 的强大功能。使用此工具集,您将保护数据质量并显著增强您的决策流程,并且您的数据驱动型见解将既强大又可靠。

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

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

相关文章

杨氏矩阵中查找某个数字是否存在(不能使用遍历)

杨氏矩阵&#xff1a; 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的 如图所示&#xff1a; i为行&#xff0c;j为列 如果要找9&#xff0c;先从arr【0】【2】处开始找&#xff0c;3<9,i,排除第一行&#xff0c;6<9,i,排除第…

基于SSM和VUE的药品管理系统(含源码+sql+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM和VUE的药品管理系统2拥有两种角色 管理员&#xff1a;药品管理、出库管理、入库管理、销售员管理、报损管理等 销售员&#xff1a;登录注册、入库、出库、销售、报损等 1.1 背景…

c++习题31-阶乘和

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 描述 用高精度计算出 S1!2!3!…n!&#xff08;n≤50&#xff09;,其中“!”表示阶乘&#xff0c;例如&#xff1a;5!54321。 输入正整数n&#xff0c;输出计算结果S。 输入描述 …

微信公众号管理系统-需求整理

微信公众号管理系统-需求整理 文章目录 一、拟开发功能1.公众账号管理(必须)2.菜单管理(必须)2.1 跳转网页(view)2.2 发送消息(media_id)2.3 永久素材管理2.4 打开指定小程序(miniprogram)2.5 自定义点击事件(click)3.权限控制(必须)二、参与人员三、开发周期四、环境及…

二叉树的层序遍历-广度优先遍历

正常来讲二叉树的层序遍历 我们 使用递归 &#xff0c;来进行 就可以得到正确答案&#xff0c;但是有时候递归比较难以理解&#xff0c;我们今天用队列的形式 来进行二叉树的层序遍历 我们使用队列对二叉树进行层序遍历的核心思想有两个 1. 我们用队列 记录二叉树每一层的…

240908-结合DBGPT与Ollama实现RAG本地知识检索增强

A. 最终效果 B. 背景说明 DBGPT在0.5.6版本中开始支持Ollama&#xff1a;v0.5.6 版本更新 网友对其Web端及界面端的设置进行了分享&#xff1a; feat(model): support ollama as an optional llm & embedding proxy by GITHUBear Pull Request #1475 eosphoros-ai/DB-G…

【新手必看】Windows 上安装 Minio及简单使用

一&#xff0c;minio是什么&#xff1f; MinIO 是一个高性能、分布式的对象存储系统&#xff0c;专门用于存储大量非结构化数据&#xff0c;例如图片、视频、日志文件、备份等&#xff0c;且一个对象文件可以是任意大小&#xff0c;从几kb到最大5T不等。Minio是一个非常轻量的服…

【数学建模】2024年国赛成绩公布时间预测

经过三天三夜的奋战&#xff0c;2024年数学建模国赛也宣告结束&#xff0c;相信这几天超高强度的比赛也让大家精疲力竭了&#xff0c;所以经过几天的调整&#xff0c;大家都恢复过来了吧。能够在高强度的压力下坚持这么久&#xff0c;大家都超级厉害的&#xff01; 当然完整提交…

如何更好地解释你的想法并说服他人

这篇内容讨论了如何更有效地解释你的思想和想法&#xff0c;并说服他人。提出了几个原则和策略&#xff0c;如意想不到、简单性、具体化、故事性和情感。 中文 1 我最近读了一本关于有效沟通的书&#xff0c;名为《让你的想法更具说服力》&#xff08;《创意黏力学》&#x…

僵尸网络开发了新的攻击技术和基础设施

臭名昭著的 Quad7 僵尸网络&#xff08;也称为 7777 僵尸网络&#xff09;不断发展其运营&#xff0c;最近的发现表明其目标和攻击方法都发生了重大变化。 根据 Sekoia.io 的最新报告&#xff0c;Quad7 的运营商正在开发新的后门和基础设施&#xff0c;以增强僵尸网络的弹性&a…

ISAC: Toward Dual-Functional Wireless Networks for 6G and Beyond【论文阅读笔记】

此系列是本人阅读论文过程中的简单笔记&#xff0c;比较随意且具有严重的偏向性&#xff08;偏向自己研究方向和感兴趣的&#xff09;&#xff0c;随缘分享&#xff0c;共同进步~ Integrated Sensing and Communications: Toward Dual-Functional Wireless Networks for 6G and…

让人物照片跳舞vigen追影

本质上是一种视频换脸技术的升级版&#xff0c;视频换身。 项目体验地址&#xff1a;》》》魔搭社区《《《 选择“创作视频” 1.上传一张全身照片 2.选择一个包含动作的视频 3.点击“开始生成” 看效果 dreamoving-v1-2024-09-08-1000017-888139-result 动作的表现力还是很惊…

通过Docker实现openGauss的快速容器化安装

容器安装 本章节主要介绍通过 Docker 安装 openGauss&#xff0c;方便 DevOps 用户的安装、配置和环境设置。 支持的架构和操作系统版本 x86-64 CentOS 7.6 ARM64 openEuler 20.03 LTS 配置准备 使用 buildDockerImage.sh 脚本构建 docker 镜像&#xff0c;buildDockerIm…

【EI稳定,马来亚大学主办】2024年计算机与信息安全国际会议(WCCIS 2024,9月27-29)

2024年计算机与信息安全国际会议 (WCCIS 2024) 将于2024年9月27-29日召开。 会议旨在为从事计算机与信息安全的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓宽研究思路&#xff0c;加强学术研究和探讨&…

动态规划(算法)---02.斐波那契数列模型_三步问题

题目链接&#xff1a; 面试题 08.01. 三步问题 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/three-steps-problem-lcci/description/ 一、题目解析 题目&#xff1a; 题目讲解&#xff1a; 我们先举例查看规律&#xff1a; 第一台阶&#xff1a;我…

鸿蒙OS 概述

鸿蒙OS 系统定义 HarmonyOS 是一款“面向未来”、面向全场景&#xff08;移动办公、运动健康、社交通信、媒体娱乐等&#xff09;的分布式操作系统。在传统的单设备系统能力的基础上&#xff0c;HarmonyOS 提出了基于同一套系统能力、适配多种终端形态的分布式理念&#xff0c…

《食品界》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《食品界》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《食品界》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a; 中国商业联合会 主办单位&#x…

【Hot100】LeetCode—62. 不同路径

目录 1- 思路题目识别动规五部曲 2- 实现⭐62. 不同路径——题解思路 3- ACM 实现 原题链接&#xff1a;62. 不同路径 1- 思路 题目识别 识别1 &#xff1a;给一个二维矩阵&#xff0c;每次只能向下或者向右移动一步识别2&#xff1a;求解到达最右下角的路径数。 动规五部曲…

Ubuntu WSL使用技巧

0 Preface/Foreword 1 默认为root用户 当下载完成Ubuntu之后&#xff0c;首次登录&#xff0c;当完成初始化后&#xff0c;提示输入新的用户名时候&#xff0c;直接点击右上角的X按钮&#xff0c;再重新登陆&#xff0c;系统会默认使用root权限登录。 2 root用户和普通用户切换…

力科示波器桌面分析远程控制软件

软件在这里下载&#xff1a;Teledyne LeCroy - MAUI Studio - Remote and Offline PC Analysis Software for an Oscilloscope 我去年因为要分析示波器波形&#xff0c;下载过它的MAUI Studio。它的免费版需要逐年注册。注册是免费的。示波器从业人员和工程技术人员可以看看示…