Scanner
會迭代 Dataset 的片段,並根據指定的列篩選和欄位投影返回資料。ScannerBuilder
可以協助建立一個。
工廠
Scanner$create()
包裝了 ScannerBuilder
介面以建立 Scanner
。它接受以下參數
dataset
:一個Dataset
或arrow_dplyr_query
物件,由Dataset
上的dplyr
方法返回。projection
:一個字元向量,包含要選擇的欄位名稱,或一個具名的運算式列表filter
:一個Expression
,用於篩選掃描的列,或TRUE
(預設) 以保留所有列。use_threads
:邏輯值:掃描是否應使用多執行緒?預設值為TRUE
...
:額外參數,目前忽略
方法
ScannerBuilder
具有以下方法
$Project(cols)
:指示掃描應僅返回由cols
給定的欄位,cols
可以是欄位名稱的字元向量或 Expression 的具名列表。$Filter(expr)
:依 Expression 篩選列。$UseThreads(threads)
:邏輯值:掃描是否應使用多執行緒?此方法的預設輸入為TRUE
,但您必須呼叫此方法才能啟用多執行緒,因為掃描器預設值為FALSE
。$BatchSize(batch_size)
:整數:掃描的記錄批次的最大列數,預設值為 32K。如果掃描的記錄批次超出記憶體,則可以呼叫此方法來減少其大小。$schema
:主動綁定,返回 Dataset 的 Schema$Finish()
:返回Scanner
Scanner
目前只有一個方法,$ToTable()
,它會評估查詢並返回 Arrow Table。
範例
# 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