延迟的dask.dataframe.dataframe.to_hdf计算崩溃

延迟的dask.dataframe.dataframe.to_hdf计算崩溃,dask,dask-distributed,dask-delayed,Dask,Dask Distributed,Dask Delayed,我使用Dask执行以下逻辑: 从多个输入文件(每个文件一个pd.DataFrame)读入主延迟dd.DataFrame) 对主延迟数据帧执行多个query调用 使用DataFrame.to_hdf保存DataFrame.query调用中的所有数据帧 如果我在我的调用中使用compute=False,并将每个调用返回的Delayeds列表提供给dask.compute,那么我会得到一个崩溃/seg故障。(如果我省略了compute=False一切运行正常)。一些谷歌搜索给了我一些关于锁的信息;

我使用Dask执行以下逻辑:

  • 从多个输入文件(每个文件一个
    pd.DataFrame
    )读入主延迟
    dd.DataFrame
  • 对主延迟数据帧执行多个
    query
    调用
  • 使用
    DataFrame.to_hdf
    保存
    DataFrame.query
    调用中的所有数据帧
如果我在我的
调用中使用
compute=False
,并将每个
调用返回的
Delayed
s列表提供给
dask.compute
,那么我会得到一个崩溃/seg故障。(如果我省略了
compute=False
一切运行正常)。一些谷歌搜索给了我一些关于锁的信息;我尝试添加一个
dask.distributed.Client
和一个
dask.distributed.Lock
馈送到
到_hdf
,以及一个
dask.utils.SerializableLock
,但我无法解决崩溃问题

以下是流程:

导入根除
进口达斯克
将dask.dataframe作为dd导入
来自dask。延迟导入延迟
def延迟_帧(文件、树名称):
“”“从多个文件创建主延迟数据帧”“”
@耽搁
def单帧(文件名、树名):
“”“读取外部文件,转换为pandas.DataFrame,返回它”“”
tree=root.open(文件名).get(树名)
return tree.pandas.df()###这是pd.DataFrame
返回dd.from\u delayed([文件中f的单帧(f,树名称)])
def保存所选帧(df、选择、前缀):
“”“对延迟的数据帧执行查询并保存HDF5输出”“”
查询={sel_名称:df.query(sel_查询)
对于sel_名称,sel_在selections.items()中查询
计算=[]
对于dfname,查询中的df.items():
outname=f“{prefix}{dfname}.h5”
computes.append(df.to_hdf(outname,f”/{prefix},compute=False))
dask.compute(*计算)
选择={“s1”:(A==True)和(N>1)“,
“s2:”(B==True)和(N>2)”,
“s3”:(C==True)&(N>3)}
从全局导入全局
df=延迟的帧(全局(“/path/to/files/*.root”),“选定”)
保存选定的帧(df,选择,“选定”)
##预期输出文件:
##-选定的_s1.h5
##-选定的_s2.h5
##-选定的_s3.h5

也许您正在使用的HDF库不是完全线程安全的?如果您不介意失去并行性,那么您可以将
scheduler=“single-threaded”
添加到计算调用中


你可能想考虑使用实木地板而不是使用HDF。它有更少的问题。

也许你正在使用的HDF库不是完全线程安全的。如果你不介意丢失并行性,那么你可以在计算调用中添加<代码>调度程序=“单线程”< /代码>。

你可能想考虑使用实木地板而不是HDF。它有更少的问题。