【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. 基本介绍

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

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法驯化师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值