我有几个数据文件~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文本文件进行二进制搜索来完成此操作,但我希望能够以压缩文件格式执行此操作。
我创建了一个镶木地板文件,其中的数据包含pandas
和pyarrow
。
问:如何在不扫描整个数据集的情况下读取一个ID?
由于数据已经排序,我不想搜索整个数据集以匹配id
。
答案 0 :(得分:0)
Parquet格式不允许任意随机访问,但它允许基于Parquet文件中嵌入的统计信息进行有效过滤。这通常称为谓词下推。
Java API为此提供了UserDefinedPredicate类。摘自本课程的Javadoc:
UserDefinedPredicate决定是保留还是删除记录,首先检查有关一组记录的元数据以查看是否可以删除整个组,然后检查单个列的实际值。
不幸的是,我不认为此功能是由任何Python绑定提供的。