我有一个由多个拼花文件组成的数据集clip1. parque,clip2.parque,…
。每一行对应于某一帧中的一个点,并且有一个有序列指定相应的帧帧:1,1,…1,2,2…2,3…3…
。每帧有几千行,但确切的数字不一定相同。帧号
<罢工>
不要
在每个剪辑中重置。
迭代读取属于一帧的所有行的最快方法是什么?
将整个数据集加载到内存中是不可能的。我假设标准行过滤器会检查所有不是最佳的行(我知道它们是按帧排序的)。我想可以为每一帧匹配一个行组,但不确定这是否是一个好的做法,甚至不确定不同大小的组是否可能。
谢谢!
在你的情况下,考虑frame
列作为索引是合理的,你可以在加载时指定它。如果你扫描所有文件的元数据(这对于本地数据来说很快,但默认情况下不是打开的),那么dask将知道每个文件的最小和最大帧值。因此,在索引上选择只会读取至少有一些相应值的文件。
df = dd.read_parquet("clip*.parquet", index="frame", calculate_divisions=True)
df[df.index == 1] # so something with this
或者,如果您想要更多控制,您可以在readparque中指定过滤器,并且您将为每次迭代创建一个新的数据框对象。
但是,请注意,groupby可能会做你想做的事情,而不必遍历帧号。Dask非常聪明,一次只加载部分数据并聚合每个分区的部分结果。这工作得有多好取决于您想对每个行集执行的算法有多复杂。
我应该提到的是,两个镶木地板后端都支持所有这些选项,你并不特别需要py箭头。