Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyarrow.parquet.write_to_dataset()在使用分区时非常慢_Python_Pyarrow - Fatal编程技术网

Python pyarrow.parquet.write_to_dataset()在使用分区时非常慢

Python pyarrow.parquet.write_to_dataset()在使用分区时非常慢,python,pyarrow,Python,Pyarrow,我在玩弄拼花地板文件,以了解它们是否适合我的用途。为此,我从csv文件加载一个数据集,并将其另存为拼花地板数据集: import pandas as pd # version 0.25 import pyarrow as pa # version 0.15 import pyarrow.parquet as pq df = pd.read_csv('my.csv') df_table = pa.Table.from_pandas(df) pq.write_t

我在玩弄拼花地板文件,以了解它们是否适合我的用途。为此,我从csv文件加载一个数据集,并将其另存为拼花地板数据集:

import pandas as pd          # version 0.25
import pyarrow as pa         # version 0.15
import pyarrow.parquet as pq

df = pd.read_csv('my.csv')

df_table = pa.Table.from_pandas(df)
pq.write_to_dataset(df_table, root_path='my.parquet')
这工作正常,速度相当快~1分钟。但是,当我尝试编写这样的分区拼花地板数据集时

pq.write_to_dataset(df_table, root_path='my.parquet', partition_cols=['id'])
花了半个多小时。这似乎很奇怪。我试图将id列设置为索引,但这没有多大变化。我错过什么了吗

文件背景:约500万行,9列。id列包含约330000个不同的值。将一个数据集分割成这样的小块是不是一个坏主意

我对Python非常陌生,因为我使用的是3.6.4版,所以我不确定是否提供了所有相关信息。如果缺少某些内容,请进行评论

编辑:
我发现在我的例子中,越少越大的块越快。这就引出了最佳块大小的问题。我在哪里可以找到这方面的信息?

每个文件约1550万/330K行,是的,在这样小的文件中使用拼花地板是个坏主意。拼花地板中的元数据存在开销,压缩量将受到限制。基于行组大小,首选~512-1024MB,但这是由于HDFS造成的。因此,不同的存储方案可能需要不同的大小。一般来说,对于小于10兆字节的文件来说,这可能没有意义。

感谢您提供文档链接。一定是错过了。因此,我在本地机器上处理拼花文件的方法是:选择尽可能大但足够小的块大小,以便在机器上有内核时将尽可能多的块放入RAM。这有意义吗?这似乎是一个很好的经验法则,但我认为这可能取决于工作负载,例如,您一次读回多少列。