我有1024个Parquet文件,每一个都有1个箱子大小。我在用python dask
把那1024个文件合并成一个文件,我有很大的磁盘空间,但ram是有限的。
使用python有没有有效的方法来解决这个问题 dask
?
import dask.dataframe as dd
def generatePath():
for i in range(0,1024):
return "data/2000-" + i +".parquet"
def readDF():
paths = generatePath()
for x in paths:
df = dd.read_parquet(x, columns=['name', 'address'], engine='pyarrow')
yield df
def mergeDF():
allDF = readDF()
df = next(allDF)
for iter_DF in allDF:
df = dd.concat([df,iter_DF])
return df.compute()
这是我的代码,它抛出内存错误。如果我是错误的请纠正我。代码是逐个文件加载并创建每个df,然后连接。在这种情况下,它不需要很多内存?
还有别的办法解决吗?
1条答案
按热度按时间bmp9r5qi1#
更新的答案
读取多个文件并将其合并为一个文件
.parquet
,试试看.repartition(1)
-看到这个帖子了吗这将合并中的所有文件
data/
变成一个文件注意:使用多个Parquet文件有好处-1,2,3,4。
古老的答案
不需要仅仅为了读取数据而计算。它会很快填满你的公羊。这可能会导致您的内存错误。你可以用
dd.read_parquet
并指定data/
直接文件夹