如何绘制巨大的Dask Dataframe框图?
我需要绘制DASK数据框,我这样做:
import holoviews as hv
from holoviews import opts
hv.extension('bokeh', 'matplotlib')
d = dd.read_parquet(dataset_dir+'/train/date*/*.parquet',
engine='pyarrow', columns=numeric_columns[:3]).fillna(0)
hv.BoxWhisker(data=d, datatype=['dask'])
并给出:
~/anaconda3/lib/python3.6/site-packages/holoviews/core/data/interface.py in initialize(cls, eltype, data, kdims, vdims, datatype)
247 % (intfc.__name__, e))
248 error = ' '.join([error, priority_error])
--> 249 raise DataError(error)
250
251 return data, interface, dims, extra_kws
DataError: None of the available storage backends were able to support the supplied data format. DaskInterface raised following error:
unsupported operand type(s) for +: 'NoneType' and 'int'
问题出在哪里?
答案 0 :(得分:2)
在大多数情况下,无需指定数据类型,它会自动推断您正在提供一个模糊的数据帧。我不太清楚问题出在哪里,但我认为您需要告诉它要显示哪一列。 HoloViews通常假定使用平面(而不是宽)数据格式,这意味着它期望使用单个值列,而其他列可以“刻面”。如果您要处理“较宽”的数据,即需要绘制一个比较三列值分布的图表,建议您使用hvPlot。
使用hvPlot应该很简单:
import hvplot.dask
d.hvplot.box()
总而言之,箱形图的快速集成尚未针对快速进行优化,因此它会将每一列全部加载到内存中。最终应将其作为this issue的一部分来解决。