vamos imaginar que tenho um arquivo enorme dividido em vários pedaços que posso ler com uma seta
X <- iris
library(arrow)
# bigX a large file that is stored in chunks on disk out of memory
bigX <- arrow_table(X)
depois de filtrar por algum valor Sepal.Width == 3.8
, recebo alguns dos dados que preciso
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
Meu problema é que também quero obter índices de linhas reais de uma seleção enorme. como neste exemplo.
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
Não é possível usar
row_number()
diretamente...mas adicionando
duckdb
ao pipeline lento, podemos executar algumas funções de janela simples (comorow_number()
), conforme descrito aqui :Isso também funciona em conjuntos de dados com vários arquivos, como um diretório (aninhado ou não) de arquivos parquet:
Embora seja muito importante executar essa etapa no início do pipeline ... se você fizer isso após a filtragem, não obterá os números reais das linhas, pois eles são relativos aos dados aos quais os números das linhas pontuais são adicionados:
NB, eu realmente gostaria de poder combinar isso com a
add_filename()
função falsa,mas infelizmente não é suportado pelo duckdb,
e
to_duckdb()
não funciona em um objeto de class"arrow_dplyr_query"
: