我在R中工作,将dplyr管道应用于R中的大型Parquet文件(数百GB)。其中一列包含标志列表(主要用于行级别的数据问题)。
我想根据这个列表中某些字符串的存在/不存在组合来过滤或分组数据集。理想情况下,我想在dplyr管道中完成此操作;但由于Parquet数据集不支持所有方法(例如unnest
和%in%
),这可能是不可能的-在这种情况下,我将在 Dataframe 中处理成批的行。
举个小例子,考虑由创建的Parquet文件(或数据框
library(dplyr)
library(arrow)
example_data <- tibble(
i=c(10, 11, 12, 13, 14),
flags=list(
list(),
list("QUESTIONABLE"),
list("MANUALLY_CHECKED", "QUESTIONABLE"),
NULL,
list("QUESTIONABLE", "UNRELATEDFLAG")
)
)
write_parquet(example_data, "withlistcol.parquet")
example_data %>% unnest(flags, keep_empty=T)
并重新读取
ds <- open_dataset("withlistcol.parquet")
如何过滤ds
中具有标志“MANUALLY_CHECKED”或没有标志“QUESTIONABLE”的行的子集?
可读性对我来说比性能更重要。
1条答案
按热度按时间thtygnil1#
对于多个分区,我在阅读每个parquet文件后对其进行过滤。
这个函数用lapply读取它并使用data.table过滤它。
当我读取分区的大文件时适用}