用Datetime索引处理未知的除法



我正在与同事处理相同的列数据,我们每个人都有数据的本地副本。关于从Parquet文件加载的Dask数据帧中如何看到划分,我们有不同的Dask行为:

我在本地机器上处理数据,他在AWS实例中处理他的数据副本。他得到了一个与未知除法相关的错误,当我在本地机器上运行相同的代码时,我不会得到这个错误。

数据是11个Parquet文件,每个文件中大约有1000万到2000万行。这11个文件中的每一个都是从。txt到Pandas的Parquet转换。使用默认的Pandasto_parquet(),并且每个文件只使用它创建一个单行组。

我们每个人用相同的Dask代码加载数据:

df = dd.read_parquet("mydir", columns=['NSPIKES', 'WAVELNTH'])

数据框有Datetime索引。mydir里只有11个Parquet文件,没有别的了。然后我们得到一些特定的行,代表大约一百万行,我们需要重新采样。

nspikes = df[df['WAVELNTH'] == 171]['NSPIKES'].astype(np.uint32)
nspikes = nspikes.resample('48s').mean()

这对于我在本地工作完全正常,但是我的同事在他的AWS实例上得到这个错误:

ValueError:只能重新采样具有已知分区的数据帧内部设计-任务文档获取更多信息。

我们还尝试了显式连接,使用Parquet文件的路径排序列表,但同样的错误:

files = sorted(list (Path('mydir').glob('*.parquet')))
ddfs = [dd.read_parquet(f, columns=['NSPIKES', 'WAVELNTH']) for f in files]
df = dd.concat(ddfs, axis=0)

什么会导致Dask的行为出现这种差异(在本地工作,而不是在远程AWS实例上工作),以及如何在不涉及全部数据负载的情况下解决问题,因为我的同事在他的实例中内存很少。

(更新1)当只处理1个parquet文件时,问题是一样的,而不是11个文件。

使用Pandas to_parquet(),每个文件只使用它创建一个单行组。

假设本地和AWS机器上的环境相同,一个可能的错误来源是AWS上缺少元数据文件(可能只上传了parquet文件?)这篇博客文章给出了保存parquet文件的示例,所以一个选项是测试当指定kwargwrite_metadata_file=False时,是否在本地机器上得到类似的行为。如果是,那么将元数据文件上传到AWS可能会解决这个问题。

最新更新