我正在尝试将一个.csv文件转换为parquet格式。它太大了,内存中放不下,所以我使用了pyarrow.dataset()。当使用扫描仪时,我可以很好地工作,如下所示:
import pyarrow.dataset as ds
import pyarrow as pa
source = "foo.csv"
dest = "Data/parquet"
dt = ds.dataset(source, format="csv")
part = ds.partitioning(pa.schema([("date", pa.date32())]), flavor="hive")
ds.write_dataset(scanner, dest, format="parquet", partitioning=part)
我的问题是.csv文件有一列“time”,其值如下:
世界协调时2022年1月3日14:30:00.000652
当使用上面的方法时,列最终变成了字符串。我可以在读入它时使用panda的to_datetime()转换它,但它有很多记录,所以每当我读取数据时都会花费大量的时间。所以,我希望将该列存储为时间戳。
我试图将一个模式传递给ds.write_dataset()
,但它返回了一个错误:
ValueError:写入扫描器时无法指定架构
我尝试将模式传递给ds.dataset()
,该列的类型为pa.timestamp("ns")
、pa.date64()
、pa.date32()
和pa.time64("ns")
,但是该列中的值出现CSV转换错误。
如何让pyarrow.dataset
正确解析这些值并将其保存为时间戳?
1条答案
按热度按时间nwlls2ji1#
ds.dataset
接受模式作为可选输入。