如果使用pyarrow将数据集写入镶木地板,如何更正csv文件混合类型



我目前正在使用pyarrow将目录中的一堆.csv文件读取到数据集中,如下所示:

import pyarrow.dataset as ds
# create dataset from csv files
dataset = ds.dataset(input_pat,
format="csv",
exclude_invalid_files = True)

创建数据集后,我将其写入镶木地板格式,如下所示:

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";用";未知";在阅读时。

这将是非常好的,因为我不想事先纠正额外函数中的错误。数据可以在这里找到。黄色出租车没有问题。读取绿色出租车的csv文件时出现问题。

如果我定义了模式,错误会得到解决吗?它会理解吗;0";作为一根绳子?

我的Unrestanding是,在大多数文件中,第14列(ehail_fee(包含空值。

加载csv数据集时,arrow会在打开找到的第一个文件时尝试猜测每列的类型。在这一点上,它假设第14列的类型为pyarrow.null()。当它找到一个包含该列的非空值的文件时,它会抛出一个错误。

如果我定义了架构,错误会得到解决吗?它会理解吗;0";作为一根绳子?

这应该有效(但我认为它应该是pyarrow.float()而不是pyarrow.string()(。

最新更新