以镶木地板格式

时间:2017-11-17 12:18:47

标签: python parquet

我有几个数据文件~1TB,每个都是用csv格式解压缩的

time,id,data1,data2,...
t1,0,x1,y1
t2,0,x2,y2
t8,0,x3,y3
t7,1,x4,y1
t9,1,x4,y2
t4,3,x5,y3
t6,3,x5,y3

它们在第二列上排序第一个,然后在第一列上排序,因此所有类似的id行彼此相邻。

我需要随机访问每个id的行,如此

get_id(data, id)

我目前通过使用fseek对未压缩的原始csv文本文件进行二进制搜索来完成此操作,但我希望能够以压缩文件格式执行此操作。

我创建了一个镶木地板文件,其中的数据包含pandaspyarrow

问:如何在不扫描整个数据集的情况下读取一个ID?

由于数据已经排序,我不想搜索整个数据集以匹配id

1 个答案:

答案 0 :(得分:0)

Parquet格式不允许任意随机访问,但它允许基于Parquet文件中嵌入的统计信息进行有效过滤。这通常称为谓词下推。

Java API为此提供了UserDefinedPredicate类。摘自本课程的Javadoc:

  

UserDefinedPredicate决定是保留还是删除记录,首先检查有关一组记录的元数据以查看是否可以删除整个组,然后检查单个列的实际值。

不幸的是,我不认为此功能是由任何Python绑定提供的。