Scanner
迭代 数据集 的片段,并根据给定的行过滤和列投影返回数据。ScannerBuilder
可以帮助创建一个 Scanner
。
工厂
Scanner$create()
包装了 ScannerBuilder
接口来创建一个 Scanner
。它接受以下参数:
dataset
:一个Dataset
或arrow_dplyr_query
对象,由Dataset
上的dplyr
方法返回。projection
:一个用于选择列的列名字符向量,或一个命名的表达式列表。filter
:一个用于过滤扫描行的Expression
,或TRUE
(默认值)以保留所有行。use_threads
:逻辑值:扫描是否应该使用多线程?默认为TRUE
。...
:其他参数,目前忽略。
方法
ScannerBuilder
具有以下方法:
$Project(cols)
:指示扫描应该只返回cols
给定的列,cols
是一个列名字符向量或一个命名的 表达式 列表。$Filter(expr)
:通过 表达式 过滤行。$UseThreads(threads)
:逻辑值:扫描是否应该使用多线程?该方法的默认输入为TRUE
,但您必须调用该方法才能启用多线程,因为扫描器的默认值为FALSE
。$BatchSize(batch_size)
:整数:扫描的记录批的最大行数,默认为 32K。如果扫描的记录批超过内存,则可以调用此方法来减小它们的大小。$schema
:活动绑定,返回数据集的 Schema。$Finish()
:返回一个Scanner
。
Scanner
目前只有一个方法 $ToTable()
,它会计算查询并返回一个 Arrow 表。
示例
# Set up directory for examples
tf <- tempfile()
dir.create(tf)
on.exit(unlink(tf))
write_dataset(mtcars, tf, partitioning="cyl")
ds <- open_dataset(tf)
scan_builder <- ds$NewScan()
scan_builder$Filter(Expression$field_ref("hp") > 100)
#> ScannerBuilder
scan_builder$Project(list(hp_times_ten = 10 * Expression$field_ref("hp")))
#> ScannerBuilder
# Once configured, call $Finish()
scanner <- scan_builder$Finish()
# Can get results as a table
as.data.frame(scanner$ToTable())
#> hp_times_ten
#> 1 1130
#> 2 1090
#> 3 1100
#> 4 1100
#> 5 1100
#> 6 1050
#> 7 1230
#> 8 1230
#> 9 1750
#> 10 1750
#> 11 2450
#> 12 1800
#> 13 1800
#> 14 1800
#> 15 2050
#> 16 2150
#> 17 2300
#> 18 1500
#> 19 1500
#> 20 2450
#> 21 1750
#> 22 2640
#> 23 3350
# Or as a RecordBatchReader
scanner$ToRecordBatchReader()
#> RecordBatchReader
#> 1 columns
#> hp_times_ten: double
#>
#> See $metadata for additional Schema metadata