跳到内容

可以使用一个或多个 DatasetFactory 来构建 Dataset。此函数帮助您构建一个可以传递给 open_dataset()DatasetFactory

用法

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 对象列表,这些对象的 datasets 应该被组合。如果指定了此参数,它将被用于构建 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(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()