如果使用 pyarrow 将数据集写入镶木地板,如何更正 csv 文件混合类型?
How to correct csv file mixed types if using pyarrow write dataset to parquet?
我目前正在使用 pyarrow 将目录中的一堆 .csv 文件读取到数据集中,如下所示:
import pyarrow.dataset as ds
# create dataset from csv files
dataset = ds.dataset(input_pat,
format="csv",
exclude_invalid_files = True)
创建数据集后,我将其写入 parquet 格式,如下所示:
ds.write_dataset(dataset,
format = "parquet",
base_dir = output_path,
basename_template = "name_data" +'_{i}.parquet',
existing_data_behavior = "overwrite_or_ignore")
现在我将它用于两个数据集,其中第一个数据集运行良好。对于第二个数据集,我收到一个错误:
ArrowInvalid: In CSV column #14: Row #111060: CSV conversion error to null: invalid value '0'
据我所知,PyArrow 不喜欢我的字符串列中有整数值(“0”)。现在,如果这是唯一的违规行为,我有没有办法在创建数据集时明确更正它?例如,我想在阅读时将“0”替换为“未知”。
这会很好,因为我不想事先更正附加功能中的错误。可以查到数据here。对于黄色出租车没有问题。读取绿色出租车的 csv 文件时出现问题。
如果我定义模式,错误会解决吗?它会理解,它应该将“0”视为字符串吗?
我的理解是,在大多数文件中,第 14 列 (ehail_fee
) 包含空值。
加载 csv 数据集时,arrow
在打开它找到的第一个文件时尝试猜测每一列的类型。此时它假定第 14 列的类型为 pyarrow.null()
。当它找到包含该列的非空值的文件时,它会抛出错误。
If I define the schema, will the error be solved? Will it understand, that it should treat "0" as a string?
应该可行(但我认为它应该是 pyarrow.float()
而不是 pyarrow.string()
)。
我目前正在使用 pyarrow 将目录中的一堆 .csv 文件读取到数据集中,如下所示:
import pyarrow.dataset as ds
# create dataset from csv files
dataset = ds.dataset(input_pat,
format="csv",
exclude_invalid_files = True)
创建数据集后,我将其写入 parquet 格式,如下所示:
ds.write_dataset(dataset,
format = "parquet",
base_dir = output_path,
basename_template = "name_data" +'_{i}.parquet',
existing_data_behavior = "overwrite_or_ignore")
现在我将它用于两个数据集,其中第一个数据集运行良好。对于第二个数据集,我收到一个错误:
ArrowInvalid: In CSV column #14: Row #111060: CSV conversion error to null: invalid value '0'
据我所知,PyArrow 不喜欢我的字符串列中有整数值(“0”)。现在,如果这是唯一的违规行为,我有没有办法在创建数据集时明确更正它?例如,我想在阅读时将“0”替换为“未知”。
这会很好,因为我不想事先更正附加功能中的错误。可以查到数据here。对于黄色出租车没有问题。读取绿色出租车的 csv 文件时出现问题。
如果我定义模式,错误会解决吗?它会理解,它应该将“0”视为字符串吗?
我的理解是,在大多数文件中,第 14 列 (ehail_fee
) 包含空值。
加载 csv 数据集时,arrow
在打开它找到的第一个文件时尝试猜测每一列的类型。此时它假定第 14 列的类型为 pyarrow.null()
。当它找到包含该列的非空值的文件时,它会抛出错误。
If I define the schema, will the error be solved? Will it understand, that it should treat "0" as a string?
应该可行(但我认为它应该是 pyarrow.float()
而不是 pyarrow.string()
)。