将 Partitioning
对象传递给 FileSystemDatasetFactory 的 $create()
方法,以指示如何解释文件的路径来定义分区。
DirectoryPartitioning
描述了如何按顺序解释原始路径段。例如,schema(year = int16(), month = int8())
将为诸如 "2019/01/file.parquet"、"2019/02/file.parquet" 等文件路径定义分区。在此方案中,将跳过 NULL
值。在前面的示例中:当写入数据集时,如果 month 为 NA
(或 NULL
),则文件将放置在 "2019/file.parquet" 中。读取时,"2019/file.parquet" 中的行将为 month 列返回一个 NA
。如果外部目录为 NULL
且内部目录不为 NULL
,则会引发错误。
HivePartitioning
适用于 Hive 样式的分区,它将字段名称和值嵌入到路径段中,例如 "/year=2019/month=2/data.parquet"。 由于字段在路径段中命名,因此顺序无关紧要。 此分区方案允许 NULL
值。 它们将被可配置的 null_fallback
替换,该 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
。