自己做一个网站难不难,景点网站设计与制作,网站建设还流行吗,网站开发工程师制作kpi前言
在大数据时代#xff0c;数据存储和处理的效率越来越重要。同时#xff0c;我们在工作中处理的数据也越来越多#xff0c;从excel格式到csv格式#xff0c;从文件文档传输到直接从数据库提取#xff0c;数据单位也从K到M再到G。
当数据量达到了G以上#xff0c;几…
前言
在大数据时代数据存储和处理的效率越来越重要。同时我们在工作中处理的数据也越来越多从excel格式到csv格式从文件文档传输到直接从数据库提取数据单位也从K到M再到G。
当数据量达到了G以上几G甚至几十G在使用python时就能察觉到数据处理效率在变慢。在这种情况下有什么更好的解决方法吗
什么是Parquet
Parquet是一种开源的列式存储数据文件格式旨在高效存储和检索数据。它提供了高效的数据压缩和编码方案能够处理大量复杂数据。同时支持多种编程语言。Parquet被设计为批处理和交互工作负载的通用交换格式类似于Hadoop中的其他列式存储格式如RCFile和ORC。
Parquet与CSV的比较
与简单的CSV格式相比Parquet在存储和处理大数据集时具有明显优势
存储效率Parquet在云存储上的需求比CSV小得多。查询性能Parquet的查询速度远高于CSV特别是在处理大数据时。成本节约使用Parquet可以大幅降低存储和数据扫描成本。
数据集Amazon S3大小查询时间数据扫描量成本CSV格式数据1 TB236秒1.15 TB$5.75Parquet格式数据130 GB6.78秒2.51 GB$0.01节省87%34倍更快99%99.7%
Parquet的优势
适用于各种大数据存储适用于存储各种类型的大数据结构化数据表、图像、视频、文档。节省云存储空间通过高效的列式压缩和灵活的编码方案显著节省云存储空间。提高数据吞吐量和性能使用数据跳过等技术只读取需要的列减少I/O提升查询性能。优化复杂数据处理支持复杂数据结构适合处理大批量数据提供高效的数据压缩和编码。
列式存储的优势
查询效率与行式存储如CSV相比列式存储可以快速跳过无关数据显著减少聚合查询时间。压缩效率列式存储支持灵活的压缩选项和高效编码方案使查询更快数据压缩更高效。不同的数据文件可以以不同的方式压缩。支持复杂查询Apache Parquet是从底层构建的支持高级嵌套数据结构优化大型数据处理特别是处理GB级别数据文件的查询。兼容多种技术适用于AWS Athena、Amazon Redshift Spectrum、Google BigQuery等交互和无服务器技术。
应用场景
大数据处理Parquet格式在大数据处理和分析场景中非常流行特别是在使用Apache Spark和Hadoop等工具时。数据仓库由于其高效的存储和读取性能Parquet常用于数据仓库中以支持快速的查询和分析。数据传输和存储Parquet格式非常适合用作长期数据存储格式同时也便于在不同系统之间传输。 Parquet用法介绍
安装必要的库
首先需要安装Pandas和PyArrow库。如果尚未安装可以使用以下命令安装
pip install pandas
pip install pyarrow创建和读取Parquet文件df转Parquet)
以下是一个简单的示例把一个Dataframe写入Parquet文件中
import pandas as pd# 创建数据
data {A: [1, 2, 3, 4, 5],B: [a, b, c, d, e],C: [1.1, 2.2, 3.3, 4.4, 5.5]
}
df pd.DataFrame(data)# 写入parquet文件
df.to_parquet(data.parquet, enginepyarrow)此时会生成一个名为data.parquet的文件。
# 读取parquet文件
df pd.read_parquet(data.parquet, enginepyarrow)# 打印前五行数据
print(df.head())读取CSV并转换为Parquet
以下是一个简单的示例代码演示如何将CSV文件转换为Parquet格式
import pandas as pd# 读取CSV文件
csv_file_path data.csv
df pd.read_csv(csv_file_path)# 将数据写入Parquet格式
parquet_file_path data.parquet
df.to_parquet(parquet_file_path, enginepyarrow)在上述代码中我们首先使用pd.read_csv函数读取CSV文件然后使用df.to_parquet函数将DataFrame保存为Parquet格式文件。
将大型CSV文件转换成Parquet格式
这个脚本的工作流程如下
使用 pandas.read_csv 逐块读取CSV文件块大小由 chunksize 参数决定。将每块数据转换为Apache Arrow的Table。使用 ParquetWriter 将每块数据写入Parquet文件。
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq# 定义读取CSV文件的块大小
chunksize 10**6 # 每次读取100万行csv_file data.csv
parquet_file large_file.parquet# 使用pandas逐块读取CSV文件
reader pd.read_csv(csv_file, chunksizechunksize)# 读取第一块数据以确定schema
first_chunk next(reader)
table pa.Table.from_pandas(first_chunk)# 打开一个新的Parquet文件以写入并设置schema
with pq.ParquetWriter(parquet_file, table.schema) as writer:writer.write_table(table)# 继续处理剩余的块for i, chunk in enumerate(reader, start1):print(fProcessing chunk {i}...)table pa.Table.from_pandas(chunk)writer.write_table(table)print(CSV to Parquet conversion completed.)注意根据具体情况调整 chunksize 的大小以平衡内存使用和I/O性能。
总结
通过使用Pandas和PyArrow等库可以方便地将CSV文件转换为Parquet格式并读取Parquet文件以进行数据操作。特别是在大规模数据分析和存储的应用中了解和使用Parquet格式可以显著提高数据处理的效率和性能。
参考链接
What is Parquet?pyarrow · PyPIInstalling PyArrow — Apache Arrow v16.1.0