当前位置: 代码网 > it编程>数据库>大数据 > 【Pyspark-驯化】spark中高效保存数据到hive表中:stored as PARQUET

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

2024年07月28日 大数据 我要评论
在PySpark中,数据可以以不同的文件格式存储,其中最常见的是TEXTFILE和PARQUET。这两种格式在存储效率、查询性能以及使用场景上有着显著的差异。STORED AS TEXTFILE:这是一种简单的存储方式,将数据以文本形式存储,通常用于非结构化数据。它不需要特定的序列化机制,易于阅读但不适合高效的数据查询。STORED AS PARQUET:Parquet是一种列式存储格式,被优化用于分析型查询。它支持复杂的嵌套数据结构,并且与Hadoop和Spark等大数据平台紧密集成。

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

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

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com