将一个 Partitioning 对象传递给 FileSystemDatasetFactory 的 $create() 方法,以指示如何解释文件路径来定义分区。
DirectoryPartitioning 描述了如何按顺序解释原始路径段。例如,schema(year = int16(), month = int8()) 将为像 "2019/01/file.parquet"、"2019/02/file.parquet" 等文件路径定义分区。在此方案中,NULL 值将被跳过。在前面的示例中:当写入数据集时,如果月份是 NA(或 NULL),文件将被放置在 "2019/file.parquet" 中。读取时,"2019/file.parquet" 中的行将返回月份列的 NA。如果外部目录是 NULL 而内部目录不是 NULL,则会引发错误。
HivePartitioning 用于 Hive 风格的分区,它将字段名称和值嵌入到路径段中,例如 "/year=2019/month=2/data.parquet"。由于字段在路径段中被命名,因此顺序无关紧要。此分区方案允许 NULL 值。写入时,它们将被替换为一个可配置的 null_fallback,该值默认为字符串 "__HIVE_DEFAULT_PARTITION__"。读取时,null_fallback 字符串将根据需要替换为 NA。
PartitioningFactory 子类指示 DatasetFactory 从文件路径中检测分区特征。
工厂
DirectoryPartitioning$create() 和 HivePartitioning$create() 方法都接受一个 Schema 作为单个输入参数。辅助函数 hive_partition(...) 是 HivePartitioning$create(schema(...)) 的简写。
使用 DirectoryPartitioningFactory$create(),您可以只提供路径段的名称(在我们的示例中是 c("year", "month")),DatasetFactory 将推断这些分区变量的数据类型。HivePartitioningFactory$create() 不接受任何参数:变量名及其类型都可以从文件路径中推断出来。不带参数的 hive_partition() 返回一个 HivePartitioningFactory。