write_*_dataset()
是一系列围绕 write_dataset 的封装器,以便于在写入数据集的函数之间轻松切换。
用法
write_delim_dataset(
dataset,
path,
partitioning = dplyr::group_vars(dataset),
basename_template = "part-{i}.txt",
hive_style = TRUE,
existing_data_behavior = c("overwrite", "error", "delete_matching"),
max_partitions = 1024L,
max_open_files = 900L,
max_rows_per_file = 0L,
min_rows_per_group = 0L,
max_rows_per_group = bitwShiftL(1, 20),
col_names = TRUE,
batch_size = 1024L,
delim = ",",
na = "",
eol = "\n",
quote = c("needed", "all", "none")
)
write_csv_dataset(
dataset,
path,
partitioning = dplyr::group_vars(dataset),
basename_template = "part-{i}.csv",
hive_style = TRUE,
existing_data_behavior = c("overwrite", "error", "delete_matching"),
max_partitions = 1024L,
max_open_files = 900L,
max_rows_per_file = 0L,
min_rows_per_group = 0L,
max_rows_per_group = bitwShiftL(1, 20),
col_names = TRUE,
batch_size = 1024L,
delim = ",",
na = "",
eol = "\n",
quote = c("needed", "all", "none")
)
write_tsv_dataset(
dataset,
path,
partitioning = dplyr::group_vars(dataset),
basename_template = "part-{i}.tsv",
hive_style = TRUE,
existing_data_behavior = c("overwrite", "error", "delete_matching"),
max_partitions = 1024L,
max_open_files = 900L,
max_rows_per_file = 0L,
min_rows_per_group = 0L,
max_rows_per_group = bitwShiftL(1, 20),
col_names = TRUE,
batch_size = 1024L,
na = "",
eol = "\n",
quote = c("needed", "all", "none")
)
参数
- dataset
Dataset, RecordBatch, Table,
arrow_dplyr_query
, 或data.frame
。如果是一个arrow_dplyr_query
,则查询将被评估,结果将被写入。 这意味着你可以select()
,filter()
,mutate()
, 等等来在写入之前转换数据。- path
字符串路径、URI 或引用要写入的目录的
SubTreeFileSystem
(如果目录不存在,则会创建它)- partitioning
Partitioning
或用作分区键(作为路径段写入)的列的字符向量。 默认为使用当前的group_by()
列。- basename_template
用于要写入的文件的名称的字符串模板。 必须包含
"{i}"
,它将被自动递增的整数替换,以生成数据文件的基本名称。 例如,"part-{i}.arrow"
将产生"part-0.arrow", ...
。 如果未指定,则默认为"part-{i}.<默认扩展名>"
。- hive_style
logical: 将分区段写为 Hive 样式 (
key1=value1/key2=value2/file.ext
) 还是仅写为裸值。 默认为TRUE
。- existing_data_behavior
当目标目录中已经有数据时要使用的行为。 必须是“overwrite”、“error”或“delete_matching”之一。
"overwrite"(默认)然后创建的任何新文件将覆盖现有文件
"error" 如果目标目录不为空,则操作将失败
"delete_matching" 然后编写器将删除任何现有分区(如果数据将要写入这些分区),并且将保留未写入数据的分区。
- max_partitions
任何批次可以写入的最大分区数。 默认为 1024L。
- max_open_files
在写入操作期间可以保持打开的最大文件数。 如果大于 0,则将限制可以保持打开的最大文件数。 如果尝试打开的文件过多,则最近最少使用的文件将被关闭。 如果此设置设置得太低,您最终可能会将数据分成许多小文件。 默认值为 900,这也允许扫描仪在达到默认 Linux 限制 1024 之前打开一些文件。
- max_rows_per_file
每个文件的最大行数。 如果大于 0,则将限制任何单个文件中放置的行数。 默认为 0L。
- min_rows_per_group
累积这么多行后,将行组写入磁盘。 默认为 0L。
- max_rows_per_group
单个组中允许的最大行数,当超过此行数时,它将被拆分,下一组行将被写入下一个组。 此值必须设置成大于
min_rows_per_group
。 默认为 1024 * 1024。- col_names
是否写入带有列名的初始标题行。
- batch_size
一次处理的最大行数。 默认为 1024L。
- delim
用于分隔值的分隔符。 对于
write_delim_dataset()
和write_csv_dataset()
默认为","
,对于write_tsv_dataset()
默认为"\t
。 不能为write_tsv_dataset()
更改。- na
要解释为缺失值的字符串的字符向量。 此字符串中不允许使用引号。 默认为空字符串
""
。- eol
用于结束行的行尾字符。 默认为
"\n"
。- quote
如何处理包含需要引用的字符的字段。
needed
- 用引号括起所有需要它们的字符串和二进制值,因为它们的 CSV 渲染本身可以包含引号(默认值)all
- 用引号括起所有有效值。 空值不会被引用。 如果推断出模式,可能会导致读取器将所有值解释为字符串。none
- 不用引号括起任何值。 阻止值包含引号 (")、单元格分隔符 (,) 或行尾符 (\r, \n)(遵循 RFC4180)。 如果值包含这些字符,则尝试写入时会导致错误。