parquet文件的操作记录
读取parquet文件的两种方法
直接读取为pandas的dataframe对象,但是速度慢。
def read_parquet_to_dataframe(file_path):
df=pd.read_parquet(file_path)
print(df)
所以改为读取为生成器的方式,提高效率,减少内存空间消耗。
def read_parquet_iter_batches():
parquet_file = pq.ParquetFile(small_parquet_file)
data_list = []
for batch in parquet_file.iter_batches():
column_names = batch.schema.names
batch_bf = zip(*batch.columns)
for row in batch_bf:
item = {}
for index, value in enumerate(row):
column_name =column_names[index]
if column_name.startswith("__"):
continue
item[column_name] = value.as_py()
print(item)
获取parquet文件的元信息
import pyarrow.parquet as pq
parquet_file = "36152ae88916cad7eecc74cafa5c6413.parquet"
schema=pq.ParquetFile(parquet_file).schema
可以查看schema,我们可以看到每个字段的名称以及数据的类型。
<pyarrow._parquet.ParquetSchema object at 0x138bcc608>
required group field_id=-1 schema {
optional binary field_id=-1 URL (String);
optional binary field_id=-1 TEXT (String);
optional double field_id=-1 WIDTH;
optional double field_id=-1 HEIGHT;
optional double field_id=-1 similarity;
optional int64 field_id=-1 hash;
optional double field_id=-1 punsafe;
optional double field_id=-1 pwatermark;
optional double field_id=-1 aesthetic;
optional binary field_id=-1 BUFFER;
}
['URL', 'TEXT', 'WIDTH', 'HEIGHT', 'similarity', 'hash', 'punsafe', 'pwatermark', 'aesthetic', 'BUFFER']
或者下面的代码
schema = pq.ParquetFile(small_parquet_file).schema_arrow
print(schema.names)
print(schema.types)
在生成Parquet文件时,通常会先创建一个包含文件元数据的几百KB的文件,然后逐步将数据写入到这个文件中,直到生成完整的Parquet文件。这是因为Parquet文件格式是一种高度压缩的列式存储格式,它要求先对数据进行一些预处理和压缩,才能生成最终的Parquet文件。为了判断文件是否生成完毕,可以通过下面的代码
metadata = pq.ParquetFile(small_parquet_file).metadata
print(metadata)
可以得到下面这些信息
<pyarrow._parquet.FileMetaData object at 0x145220990>
created_by: parquet-cpp-arrow version 6.0.1
num_columns: 10
num_rows: 40000
num_row_groups: 1
format_version: 1.0
serialized_size: 5979
统计当前文件下parquet文件数据总行数
from pathlib import Path
import pyarrow.parquet as pq
file = Path("source/parquet_files")
count = 0
for each in file.glob("*.parquet"):
pqobj = pq.ParquetFile(each)
schema = pqobj.schema_arrow
metadata = pqobj.metadata
num_rows = metadata.num_rows
count += num_rows
print(schema)
print(metadata)
print("total:", count)
本文作者:一起来学python
本文链接:https://www.cnblogs.com/c-x-a/p/17222399.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2021-03-16 HttpURLConnection和okhttp的使用
2018-03-16 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near