parquet是什么
Apache Parquet 是一种 列式存储 格式可用于 Hadoop 生态系统中的任何组件,无论是数据处理框架,数据模型,或者编程语言。Parquet 文件格式包含几个支持数据仓库风格操作的功能 : - 列式存储设计 - 仅仅从数据文件或者表中读取一小部分数据时查询可以检测和执行计算所有值中的一个列。 - 灵活的压缩选项 - 数据能够使用几种编码器压缩。可以将不同的数据文件压缩成不同的格式。 - 新颖的编码方案 - 相同的,相似的或者相关数据值的序列可以存储在硬盘和内存。The encoding schemes provide an extra level of space savings beyond overall compression for each data file。 - 大的文件 - Parquet 数据文件是被设计用于优化查询大量数据,单个文件大小在 MB 甚至 GB 以上。
在实际的数据挖掘工作中,可能会有把parquet文件转为csv后本地验证或者实验的需求。
如何把parquet转为csv
前期准备
需要安装pyarrow
库: 1
conda install pyarrow
or 1
pip install pyarrow
处理转换
python文件如下: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38import os
import pandas as pd
import pyarrow.parquet as pq
def read_pyarrow(path, use_threads=1):
return pq.read_table(path, use_threads=use_threads).to_pandas()
def get_file_list(file_dir='.'):
L = []
for root, _, files in os.walk(file_dir):
for file in files:
if os.path.splitext(file)[1] == '.parquet':
L.append(os.path.join(root, file))
return L
def get_csv(file_list):
init_flag = 0
for f in file_list:
print('The current handling file is:\n', f)
if init_flag == 0:
init_df = read_pyarrow(f)
init_flag = 1
else:
t_df = read_pyarrow(f)
init_df = pd.concat([init_df, t_df])
return init_df
path = 'JoinPredict-20190401055632-SLOT_0-29358'
file_list = get_file_list(path)
df = get_csv(file_list)
df.to_csv('./parquet_data.csv',
sep=',', index=False, mode='w', line_terminator='\n', encoding='utf-8')
笔者本身的需求便是要把一个文件夹内的多个parquet文件转换为一个总的csv文件。如需要分别转换,修改源码即可。