跳过内容

一个数据集 (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将从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,因此会更慢,尤其是在远程文件系统上。如果为 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应该支持的选项,请提出问题。

返回值

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

详情

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