我的用例是每天处理约100MB。我将Pandas DataFrame用作单个文件,但是由于Pandas倾向于根据不同日期的数据强制dtypes,因此此操作失败。我尝试使用Dask DataFrame读取这些内容,但由于架构不同,它失败了。具有描述性的列名和717列的异常消息是无法处理的(100KB的固定长度的密集二进制字符串)。
因此,我尝试使用Dask编写一个大型实木复合地板,并希望它能整理出dtypeskduggery熊猫。有时,我需要在已经拥有的所有日期数据的中间重新处理一两天。
到目前为止,我设法做到这一点,这非常丑陋,我不禁想到还有更好的方法。似乎没有办法在read_parquet中使用过滤器,因为我们对索引进行过滤。似乎没有办法否定索引值的范围。索引只是一个日期,没有小时,等等。df是一天中的数据,而mdf是我的mega-df,其中包含了几年的数据
mdf = dd.read_parquet(self.local_location + self.megafile, engine='pyarrow')
inx = df.index.unique()
start1 = '2016-01-01'
end1 = pd.to_datetime(inx.values.min()).strftime('%Y-%m-%d')
start2 = pd.to_datetime(inx.values.max()).strftime('%Y-%m-%d')
end2 = '2029-01-01'
mdf1 = mdf[start1:end1]
mdf2 = mdf[start2:end2]
if len(mdf1) > 0:
df_usage1 = 1 + mdf1.memory_usage(deep=True).sum().compute() // 100000001
if len(mdf2) > 0:
df_usage2 = 1 + mdf1.memory_usage(deep=True).sum().compute() // 100000001
mdf1 = mdf1.append(mdf2, npartitions=df_usage2)
else:
if len(mdf2) > 0:
df_usage2 = 1 + mdf2.memory_usage(deep=True).sum().compute() // 100000001
mdf1 = dd.from_pandas(df).append(mdf2, npartitions=df_usage2)
这也会在
处引发异常mdf1 = mdf1.append(df, npartitions=df_usage1)
{ValueError}Exactly one of npartitions and chunksize must be specified.
这很有趣,因为那正是我在做什么。
df_usage2在这种情况下= 2
寻求更好的替代方法,也许可以解释附录中的实际错误。
答案 0 :(得分:0)
我建议不要提供npartitions=
关键字