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

【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中使用这两种存储格式,并理解了它们在不同场景下的应用。希望这篇博客能够帮助你更好地选择适合你数据需求的存储格式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python数据分析与可视化一

公共部分 # 引入数据分析工具 Pandas import pandas as pd # 引入数据可视化工具 Matplotlib import matplotlib.pyplot as plt # 引入数据可视化工具 Seaborn (基于matplotlib) import seaborn as sns # 解决输出时的列名对齐问题 pd.set_option(display.unicode.east_…

短视频利器 ffmpeg (2)

ffmpeg 官网这样写到 Converting video and audio has never been so easy. 如何轻松简单的使用: 1、下载 官网:http://www.ffmpeg.org 安装参考文档: https://blog.csdn.net/qq_36765018/article/details/139067654 2、安装 # 启用RPM …

华强盛网络变压器外部电路如何接线

图一是 华强盛 Hqst 网络变压器工厂19926430038 华强盛电子导读: 网络变压器的外部电路接线通常依赖于其设计和用途。一般来说,网络变压器有多个端口,每个端口可能用于不同的连接或功能。以下是一些可能的接线方式: 1. **主电源…

自研网关架构设计

网关项目 1. 了解网关网关横向对比为什么自研网关 2. 架构设计技术栈技术要点异步化设计使用缓存缓冲合理使用串行化吞吐量为王合适的工作线程 架构图 1. 了解网关 概念 访问数据、业务逻辑或功能的 “前门”负责处理接受和处理调用过程中的所有任务 类型 RESTful APl 使用…

核方法总结(三)———核主成分(kernel PCA)学习笔记

一、核主成分 1.1 和PCA的区别 PCA (主成分分析)对应一个线性高斯模型(参考书的第二章),其基本假设是数据由一个符合正态分布的隐变量通过一个线性映射得到,因此可很好描述符合高斯分布的数据。然而在很多实…

深入分析 Android BroadcastReceiver (七)

文章目录 深入分析 Android BroadcastReceiver (七)1. 高级应用场景1.1 示例:动态权限请求1.2 示例:应用内通知更新 2. 安全性与性能优化2.1 示例:设置权限防止广播攻击2.2 示例:使用 LocalBroadcastManager2.3 示例:在…

零成本打造精品宣传册

​随着互联网的发展,企业和个人对宣传册的需求日益增长,然而,高质量的宣传册制作往往需要不菲的成本。那么,如何零成本打造精品宣传册呢? 一、明确定位和目标群体 在制作宣传册之前,首先要明确其定位和目标…

关于怎么将wireshark抓包视频流转为视频播放出来

0.安装wireshark 安装PotPlayer 1.将以下两个插件放入 C:\Program Files\Wireshark\plugins 目录中 2.筛选视频流数据包,右键Decode As… 改为RTP 或者 右键->follow(追踪流)->UDP stream 然后叉掉弹窗 3.选择菜单Edit->Prefe…

职责链让树状分支更严谨更易读更易维护

业务场景 传统方式就不列举了 职责链解决 Chain 类 class Chain {fn: Function;successor: any;constructor(fn: Function) {this.fn fn;this.successor null;}setNextSuccessor(successor: any) {return (this.successor successor);}passRequest() {var ret this.fn.a…

微信公众号扫码授权登录

【微信扫登录】原理说明 1、准备工作:注册开放微信公众号。获得此账号的AppID和AppSecret。 2、发起授权登录:通过授权链接或者扫码授权二维码的方式,获取登录code,通过code获取access_token。 3、成功获取access_token即代表登…

[CTF]-PWN:mips反汇编工具,ida插件retdec的安装

IDA是没有办法直接按F5来反汇编mips的汇编的,而较为复杂的函数直接看汇编不太现实,所以只能借用插件来反汇编 先配置环境,下载python3.4以上的版本,并将其加入到环境变量中 下载retdec 地址:Release v1.0-ida80 ava…

常见Web认证方式对比

认证是一个在用户或者设备在访问一个受限的系统时,鉴定用户凭据的过程,即确认“你是谁”的问题。最常见的认证用户的方式是通过用户名和密码的形式进行校验,目前存在多种校验方式,本文将对其进行一个简单的对比,使得大…

今天起,全球所有Mac用户可免费安装桌面版ChatGPT

在 macOS 上,用户在安装新的 ChatGPT 应用程序后,使用 Option Space 的键盘组合即可快速调用 ChatGPT。 刚刚,OpenAI 宣布推出适用于 macOS 的应用程序。 虽然 Mac 应用程序尚未在 Mac App Store 中提供,但用户可以直接从 Open…

Lean4Game 开发教程 | 数学形式化

引言 Lean 是一门用于形式化证明的编程语言,它允许严格证明数学定理和验证软件代码的正确性。 本篇介绍 Lean 游戏的编写和发布方式。这类游戏不仅利于对 Lean 本身的学习,对学科知识的理解,还能推动数学圈内人对 Lean 的接触学习。 Lean4…

elementUI搭建使用过程

前言 Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组 件库 安装 ElementUI 在终端命令行输入 npm i element-ui -S 在 main.js 中写入以下内容: import ElementUI from element-ui ; import element-ui/lib/theme-chalk/i…

0-30 VDC 稳压电源,电流控制 0.002-3 A

怎么运行的 首先,有一个次级绕组额定值为 24 V/3 A 的降压电源变压器,连接在电路输入点的引脚 1 和 2 上。(电源输出的质量将直接影响与变压器的质量成正比)。变压器次级绕组的交流电压经四个二极管D1-D4组成的电桥整流。桥输出端…

北邮《计算机网络》蒋老师思考题及答案-传输层

蒋yj老师yyds! 答案自制,仅供参考,欢迎质疑讨论 问题一览 传输层思考题P2P和E2E的区别使用socket的c/s模式通信,流控如何反映到编程模型三次握手解决什么问题举一个两次握手失败的例子为什么链路层是两次握手而非三次?…

深入理解 XML 和 HTML 之间的区别

在现代网络技术的世界中,XML(可扩展标记语言)和 HTML(超文本标记语言) 是两个非常重要的技术。尽管它们都使用标签和属性的格式来描述数据,但它们在形式和用途上有显著的区别。 概述 什么是 XML&#xff…

安装CLion配置opencv和torch环境

配置操作如图,源码见底部附录部分 安装CLion 官网下载 创建项目 设置环境 调整类型为release 配置opencv和项目 编译环境 编译后 重启CLion 测试opencv环境 测试代码 运行main.cpp显示图片 测试torch环境 没标红表示配置成功 附件 CMakeList.txt cmake_mi…

Redis集群部署合集

目录 一. 原理简述 二. 集群配置​​​​​​​ 2.1 环境准备 2.2 编译安装一个redis 2.3 创建集群 2.4 写入数据测试 实验一: 实验二: 实验三: 实验四: 添加节点 自动分配槽位 提升节点为master: 实验…