【Pyspark-驯化】spark中高效保存数据到hive表中:stored as PARQUET

news2024/12/22 19:23:55

【Pyspark-驯化】spark中高效保存数据到hive表中:stored as PARQUET

 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。


文章目录

    • 🎯 1. 基本介绍
    • 💡 2. 代码使用
      • 2.1 使用TEXTFILE存储格式
      • 2.2 使用PARQUET存储格式
    • 🔍 3. 注意事项
    • 🔍 4. 总结

🎯 1. 基本介绍

  在PySpark中,数据可以以不同的文件格式存储,其中最常见的是TEXTFILE和PARQUET。这两种格式在存储效率、查询性能以及使用场景上有着显著的差异。

  • STORED AS TEXTFILE:这是一种简单的存储方式,将数据以文本形式存储,通常用于非结构化数据。它不需要特定的序列化机制,易于阅读但不适合高效的数据查询。
  • STORED AS PARQUET:Parquet是一种列式存储格式,被优化用于分析型查询。它支持复杂的嵌套数据结构,并且与Hadoop和Spark等大数据平台紧密集成。

💡 2. 代码使用

2.1 使用TEXTFILE存储格式

  TEXTFILE存储格式是一种常见的文本文件存储格式,也是Hadoop中默认的文件存储格式之一。它是一种无压缩的存储格式,适合存储大规模的文本数据。
  TEXTFILE存储格式将文本数据按行进行存储,每行数据都以换行符分隔。每一行可以是任何字符序列,可以是UTF-8编码的文本,也可以是二进制数据。不同的记录之间没有特定的分隔符或结构。这种存储格式的简单性使得它易于使用和处理。

  • 使用TEXTFILE存储格式具有以下优点:
  • 可读性好:由于存储的是明文文本,易于阅读和理解。
  • 通用性强:可以存储各种类型的文本数据,包括纯文本、CSV格式、JSON格式等。
  • 灵活性高:由于没有特定的分隔符或结构,可以自由定义记录的格式和解析方式。
  • 适用性广泛:作为Hadoop默认的文件存储格式之一,可以方便地与Hadoop生态系统中的其他工具和组件集成使用。
  • 但是,TEXTFILE存储格式也存在一些缺点:
  • 占用存储空间大:由于文件没有经过压缩处理,所以存储空间较大。
  • 读取性能较低:由于没有压缩和索引的支持,在大规模数据集上的读取性能相对较低。
  • 不适合处理结构化数据:由于缺乏严格的分隔符和结构,相对不适合存储和处理结构化的数据。
      具体的pyspark通过sparksession指定格式中的代码实践如下所示:
from pyspark.sql import SparkSession

# 创建SparkSession
spark = SparkSession.builder \
    .appName("TEXTFILE vs PARQUET") \
    .getOrCreate()

# 创建一个DataFrame
df_text = spark.createDataFrame([(1, "Alice"), (2, "Bob")], ["id", "name"])

# 写入TEXTFILE格式
df_text.write \
    .option("header", "true") \
    .csv("path_to_output_textfile")

# 输出结果:数据将被写入到指定路径的文本文件中

  在创建表的时候指定格式,具体的代码如下所示:

CREATE TABLE IF NOT EXISTS my_table_name (
  column1_name column1_datatype,
  column2_name column2_datatype,
  ...
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;  -- 指定存储格式为TEXTFILE

2.2 使用PARQUET存储格式

  PARQUET存储格式是一种列式存储格式,常用于大规模数据存储和分析场景。它在存储和处理大规模结构化数据上具有很高的效率和性能。
  `PARQUET存储格式将数据按列进行存储,而不是按行存储。每列的数据都以独立的文件进行存储,利用列内数据的相似性进行高效的压缩和编码。这种存储方式使得PARQUET能够提供更高的读取和查询性能,减少了数据的I/O开销,并且能够更好地利用系统内存和CPU资源。

  • PARQUET存储格式具有以下特点和优势:
  • 列式存储:按列存储数据,减少了存储空间和I/O开销,提高了读取和查询性能。
  • 压缩效率高:PARQUET支持多种压缩算法,如Snappy、Gzip和LZO等,可以根据数- - 据特点选择最合适的压缩方式。
  • 列压缩和编码:PARQUET采用了高效的列压缩和编码算法,对相同的数据进行重复压缩和编码,进一步减少存储空间。
  • 谓词下推(Predicate Pushdown):PARQUET支持谓词下推操作,可以在查询执行之- 前通过元数据信息进行过滤,减少数据的扫描和读取量,提高查询效率。
  • 列式统计信息:PARQUET存储格式可以在列级别上存储统计信息,如最大值、最小值、唯一值数量等,方便进行数据分析和查询优化。
      具体的pyspark通过sparksession指定格式中的代码实践如下所示:
from pyspark.sql import SparkSession

# 创建SparkSession
spark = SparkSession.builder \
    .appName("Create Table with Storage Format") \
    .getOrCreate()

# 创建DataFrame
df = spark.createDataFrame([(1, "Alice"), (2, "Bob")], ["id", "name"])

# 使用Parquet格式创建表
df.write \
    .saveAsTable("my_table_name", format="parquet")

  在创建表的时候指定格式,具体的代码如下所示:

CREATE TABLE IF NOT EXISTS my_table_name (
  column1_name column1_datatype,
  column2_name column2_datatype,
  ...
)
STORED AS PARQUET;  -- 指定存储格式为Parquet

🔍 3. 注意事项

  • TEXTFILE格式适合于小规模数据或日志数据,而PARQUET格式适合于需要高效查询和分析的大规模数据集。
  • Parquet文件是列式存储,可以显著提高查询性能,尤其是在数据倾斜或过滤操作中。
  • Parquet格式支持数据压缩,可以有效减少存储空间。
  • 在读取Parquet文件时,Spark可以利用列剪枝(Column Pruning)和谓词下推(Predicate Pushdown)来提高查询效率。

🔍 4. 总结

  在PySpark中,选择正确的存储格式对于优化数据处理和查询性能至关重要。TEXTFILE格式简单易用,但只适合非结构化数据或小规模数据集。相比之下,PARQUET格式提供了高效的存储和查询能力,尤其适合于分析型工作负载。通过本博客的代码示例,我们学习了如何在PySpark中使用这两种存储格式,并理解了它们在不同场景下的应用。希望这篇博客能够帮助你更好地选择适合你数据需求的存储格式。

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

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

相关文章

WEB攻防【6】——Python考点/CTF与CMS/SSTI模板注入/PYC反编译

#知识点 1、PYC文件反编译 2、python-web-SSTI 3、SSTI模板注入利用分析 SSTI 就是服务器端模板注入 (Server-Side Template Injection) 当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成…

2, 搭建springCloud 项目 测试demo

上篇文章 新建了父依赖服务,这篇文章就建两个demo测试服务。 因为后面需要做服务间的通讯测试,所以至少需要建两个服务 建个子模块 同样的方式建连个demo服务 给java 和resources目录添加属性 在resources目录下建一个applications.yml文件,…

如何评估CRM客户系统的功能是否满足助贷机构的需求?

评估 CRM 客户系统的功能是否满足助贷机构的需求,可以从以下几个方面入手: 1. 客户信息管理 - 检查系统能否全面、准确地记录客户的基本信息,如个人身份、财务状况、贷款需求等。 - 确认是否支持多维度的客户分类和标签功能,以…

Linux Redis 服务设置开机自启动

文章目录 前言一、准备工作二、操作步骤2.1 修改redis.conf文件2.2 创建启动脚本2.3 设置redis 脚本权限2.4 设置开机启动2.5 验证 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 提示:以下是本篇文章正文内容&#x…

十步学习法,赋能程序员

大家好,我是码农先森。 引言 最近看了《软技能:代码之外的生存指南》这本书,对其中的 “十步学习法”。 有一些感触,所以将其中的内容记录并总结了下来,分享给大家。 程序员在学习成长的过程中,除了关注…

视频无法正常播放,提示0xc10100be错误代码怎么办?

有时我们在电脑上播放视频会提示“0xc10100be错误代码”,视频无法正常播放,这个视频播放问题是比较常见的问题。 通常导致出现错误代码0xc10100be的原因如下: 1.不正确的文件扩展名:如果在没有使用专用视频转换工具的情况下&…

【C++入门必备】【命名空间】【缺省略参数】【C++输入输出】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:LiUEEEEE                        …

ImageMasking-对图片做随机遮掩/块遮掩

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言从ipynb文件入手带注释的python文件modulesmask.pyutils.py 前言 1.可以去github直接下载这个项目,这样下载得到的是比较干净的版本,我把有注释的按…

[每周一更]-(第103期):GIT初始化子模块

文章目录 初始化和更新所有子模块分步骤操作1. 克隆包含子模块的仓库2. 初始化子模块3. 更新子模块 查看子模块状态提交子模块的更改处理子模块路径错误的问题 该问题的缘由是因为:在写某些代码的时候,仓库中有些文件夹,只提交了文件夹名称到…

小盒子跑大模型!基于算能BM1684X+FPGA平台实现大模型私有化部署

当前,在人工智能领域,大模型在丰富人工智能应用场景中扮演着重要的角色,经过不断的探索,大模型进入到落地的阶段。而大模型在落地过程中面临两大关键难题:对庞大计算资源的需求和对数据隐私与安全的考量。为应对这些挑…

龙迅#LT9721芯片适用于HDMI1.4转EDP应用功能,分辨率高达4K30HZ。

1.特点 •HDMI1.4接收器 支持最大3.4Gbps输入数据速率 支持HDMI1.4中指定的3D视频数据流 支持HDCP1.4和DDC从属EDID 支持分辨率高达4Kx2K30Hz的RGB 支持热插头检测 没有HEAC和CEC支持 •eDP1.4发射器 符合VESA eDP1.4标准 支持4车道与1.62Gbps(RBR&…

前端开源项目Vuejs:让前端开发如虎添翼!

文章目录 引言一、Vue.js的优势二、Vue.js实战技巧三、Vue.js社区与资源结语 引言 在前端开发的世界里,Vue.js凭借其简洁、轻量且功能强大的特性,逐渐崭露头角,成为众多开发者心中的首选框架。 一、Vue.js的优势 Vuejs项目地址 Vue.js之…

基于Java的茶文化交流系统【附源码+LW】

摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话…

【Linux】Ubuntu 部署 Zabbix 7.0

实验环境:Ubuntu-22.04 官方下载地址: 下载Zabbix 7.0 LTS for Ubuntu 22.04 (Jammy), MySQL, Apache 1、下载 Zabbix 官方安装包以及环境配置 下载 zabbix 安装包 wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabb…

【2024最新版】图解Mysql数据库配置、命令行及Workbench访问(Windows版本)

目录 1. 准备工作1.1 安装MySQL1.2 验证MySQL的环境变量 2. 环境变量配置3. 访问MySQL3.1 命令行访问MySQL3.2 Workbench访问MySQL 1. 准备工作 1.1 安装MySQL 如果您已经安装了MySQL,请从【2. Mysql 环境配置】开始;如果您没有安装MySQL,请…

如何用Vue3和Plotly.js绘制动态3D图表?

本文由ScriptEcho平台提供技术支持 项目地址:传送门 Plotly.js: 使用Vue.js动态加载数据并绘制图表 应用场景 在数据可视化应用中,需要将数据动态加载到图表中并进行实时更新。本文将展示如何使用Plotly.js和Vue.js实现这一功能,从加载外…

Halcon 重叠区域 显示汉字 图像分割

一 如何填充区域之间的GAP或分割重叠区域 read_image(Image,fabrik)*区域生长法将图像分割成相同强度的区域,并将其划分成大小为行*列的矩形。 为了确定两个相邻的矩形是否属于相同的区域, *仅使用其中心点的灰度值。 如果灰度值差小于等于公差&#xff…

# Kafka_深入探秘者(3):kafka 消费者

Kafka_深入探秘者(3):kafka 消费者 一、kafka 消费者、消费组 1、Kafka 消费者是消费组的一部分,当多个消费者形成一个消费组来消费主题时,每个消费者会收到不同分区的消息。假设有一个 T1 主题,该主题有…

【MySQL系列】abc索引分析

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习…

【操作与配置】WSL配置LINUX

WSL2(Windows Subsystem for Linux 2)是Microsoft开发的一项技术,允许用户在Windows操作系统上运行Linux发行版。WSL2是WSL(Windows Subsystem for Linux)的第二版,带来了许多改进和新特性。 官网&#xff…