跳到內容

可以使用一個或多個 DatasetFactory 來建構 Dataset。此函數協助您建構一個 DatasetFactory,您可以將其傳遞給 open_dataset()

用法

dataset_factory(
  x,
  filesystem = NULL,
  format = c("parquet", "arrow", "ipc", "feather", "csv", "tsv", "text", "json"),
  partitioning = NULL,
  hive_style = NA,
  factory_options = list(),
  ...
)

引數

x

指向包含資料檔案的目錄的字串路徑、指向一個或多個資料檔案的字串路徑向量,或應組合其資料集的 DatasetFactory 物件的列表。如果指定此引數,它將用於建構 UnionDatasetFactory,並且其他引數將被忽略。

filesystem

FileSystem 物件;如果省略,將從 x 偵測 FileSystem

format

FileFormat 物件,或 x 中檔案格式的字串識別符。目前支援的值

  • "parquet"

  • "ipc"/"arrow"/"feather",彼此的所有別名;對於 Feather,請注意僅支援版本 2 檔案

  • "csv"/"text",相同事物的別名(因為逗號是文字檔案的預設分隔符號)

  • "tsv",相當於傳遞 format = "text", delimiter = "\t"

預設值為 "parquet",除非也指定了 delimiter,在這種情況下,它被假定為 "text"。

partitioning

以下其中之一

  • Schema,在這種情況下,將解析相對於 sources 的檔案路徑,並且路徑段將與 schema 欄位匹配。例如,schema(year = int16(), month = int8()) 將為類似 "2019/01/file.parquet"、"2019/02/file.parquet" 等檔案路徑建立分割區。

  • 字元向量,定義對應於這些路徑段的欄位名稱(也就是說,您正在提供將對應於 Schema 的名稱,但類型將被自動偵測)

  • HivePartitioningHivePartitioningFactory,由 hive_partition() 返回,它從 Hive 樣式的路徑段解析明確或自動偵測的欄位

  • NULL 表示不分割

hive_style

邏輯值:如果 partitioning 是字元向量或 Schema,是否應將其解釋為指定 Hive 樣式的分割?預設值為 NA,這表示檢查檔案路徑以進行 Hive 樣式的分割並據此行為。

factory_options

FileSystemFactoryOptions 的可選列表

  • partition_base_dir:字串路徑段前綴,用於在使用 DirectoryPartitioning 發現分割資訊時忽略。對於 HivePartitioning 沒有意義(忽略並發出警告),當提供檔案路徑向量時也無效。

  • exclude_invalid_files:邏輯值:是否應排除無效的資料檔案?預設值為 FALSE,因為預先檢查所有檔案會產生 I/O,因此速度會較慢,尤其是在遠端檔案系統上。如果為 false 且存在無效檔案,則在掃描時會發生錯誤。這是唯一適用於以下情況的 FileSystemFactoryOption:在其中發現檔案的目錄路徑,以及提供檔案路徑向量。

  • selector_ignore_prefixes:字元向量,表示在目錄中發現檔案時要忽略的檔案前綴。如果可以透過常見的檔案名稱前綴排除無效檔案,您可以避免 exclude_invalid_files 的 I/O 成本。當提供檔案路徑向量時無效(但如果您提供檔案列表,您可以自行篩選無效檔案)。

...

其他格式特定的選項,傳遞給 FileFormat$create()。對於 CSV 選項,請注意,您可以使用 Arrow C++ 程式庫命名("delimiter"、"quoting" 等)或 read_csv_arrow() 中使用的 readr 樣式命名("delim"、"quote" 等)來指定它們。並非所有 readr 選項目前都受支援;如果您遇到 arrow 應該支援的選項,請提交 issue。

DatasetFactory 物件。將其傳遞給 open_dataset(),在列表中可能包含其他 DatasetFactory 物件,以建立 Dataset

詳細資訊

如果您只有單個 DatasetFactory(例如,您有一個包含 Parquet 檔案的單個目錄),您可以直接呼叫 open_dataset()。當您想要組合不同的目錄、檔案系統或檔案格式時,請使用 dataset_factory()