跳至内容

一个 Dataset 可以使用一个或多个 DatasetFactory 来构建。此函数帮助您构建一个 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 对象;如果省略,FileSystem 将从 x 中检测。

format

一个 FileFormat 对象,或 x 中文件格式的字符串标识符。当前支持的值

  • "parquet"

  • "ipc"/"arrow"/"feather",都是彼此的别名;对于 Feather,请注意仅支持版本 2 文件

  • "csv"/"text",是同一事物的别名(因为逗号是文本文件的默认分隔符

  • "tsv",等效于传递 format = "text", delimiter = "\t"

默认值为 "parquet",除非还指定了 delimiter,在这种情况下,它被假定为 "text"。

partitioning

以下之一

  • 一个 Schema,在这种情况下,相对于 sources 的文件路径将被解析,路径段将与模式字段匹配。例如,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,因此速度会变慢,尤其是在远程文件系统上。如果为假且存在无效文件,则在扫描时会出现错误。这是唯一一个在提供要发现文件的目录路径和提供文件路径向量时都有效的 FileSystemFactoryOption。

  • selector_ignore_prefixes:在目录中发现文件时要忽略的文件前缀的字符向量。如果可以通过通用文件名前缀排除无效文件,则可以避免 exclude_invalid_files 的 I/O 成本。当提供文件路径向量时无效(但是,如果您提供文件列表,则可以自己过滤无效文件)。

...

其他特定于格式的选项,传递给 FileFormat$create()。对于 CSV 选项,请注意,您可以使用 Arrow C++ 库命名 ("delimiter"、"quoting" 等) 或 read_csv_arrow() 中使用的 readr 样式命名 ("delim"、"quote" 等) 来指定它们。目前并非所有 readr 选项都支持;如果您遇到 arrow 应该支持的选项,请提交问题。

返回值

一个 DatasetFactory 对象。将此传递给 open_dataset(),在一个可能包含其他 DatasetFactory 对象的列表中,以创建一个 Dataset

详细信息

如果您只有一个 DatasetFactory(例如,您只有一个包含 Parquet 文件的目录),您可以直接调用 open_dataset()。当您想要组合不同的目录、文件系统或文件格式时,使用 dataset_factory()