假设我有一个巨大的文件,分为许多部分,我可以用箭头读取
X <- iris
library(arrow)
# bigX a large file that is stored in chunks on disk out of memory
bigX <- arrow_table(X)
按某个值过滤后Sepal.Width == 3.8
,我得到了一些我需要的数据
library(dplyr)
bigX %>%
filter(Sepal.Width == 3.8) %>%
collect()
..
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.7 3.8 1.7 0.3 setosa
2 5.1 3.8 1.5 0.3 setosa
3 5.1 3.8 1.9 0.4 setosa
4 5.1 3.8 1.6 0.2 setosa
5 7.7 3.8 6.7 2.2 virginica
6 7.9 3.8 6.4 2.0 virginica
我的问题是我还想从整个巨大的选择中获取真实的行索引。就像这个例子一样。
X[X$Sepal.Width==3.8,]
..
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
19 5.7 3.8 1.7 0.3 setosa
20 5.1 3.8 1.5 0.3 setosa
45 5.1 3.8 1.9 0.4 setosa
47 5.1 3.8 1.6 0.2 setosa
118 7.7 3.8 6.7 2.2 virginica
132 7.9 3.8 6.4 2.0 virginica
直接用是不行的
row_number()
...但是添加
duckdb
到惰性管道中,我们可以执行一些简单的窗口函数(例如row_number()
),如下所述:这也适用于多文件数据集,例如 parquet 文件的目录(嵌套或非嵌套):
尽管在管道中尽早执行该步骤非常重要......如果您在过滤后执行此操作,则不会获得真正的行号,因为它们与添加点行号的数据相关:
注意,我真的很希望能够将其与
add_filename()
人造功能结合起来,但遗憾的是,duckdb 不支持它,
并且
to_duckdb()
不适用于类的对象"arrow_dplyr_query"
: