1

所以我正在试用 Datashader,它的外观和性能都很棒。但是,所有示例都必须使用具有大量内存的机器来完成,或者只是没有那么大的数据集。因为当我尝试做一些大情节时,我炸毁了我的 16GB 内存。我毫不怀疑 Datashader 可以处理数据,但是,我不知道如何加载它并分段绘制它。

所以要清楚,它不是在绘图期间,而是实际上通过从数据库读取失败 - 但是,由于 Datashader 是一个用于绘制真正大数据的库,所以必须有一些方法而不是在 df 中加载所有内容并传递它?

我现在的代码:

from colorcet import fire
import psycopg2
import datashader as ds
import datashader.transfer_functions as tf
con = getCon()
query = """SELECT latitude, longitude FROM mydatabasetable"""
df = pd.read_sql(query, con)
cvs = ds.Canvas(plot_width=400, plot_height=400)
agg = cvs.points(df, 'longitude', 'latitude')
img = tf.shade(agg, cmap=['lightblue', 'darkblue'], how='log')

例如,是否可以多次调用 cvs.points 方法(从而将我的数据分成几位?)

4

1 回答 1

0

Datashader 支持 Pandas、Dask 和 CUDA 数据帧 (cuDF),每个数据帧都有自己的优势和局限性。Pandas 是一个不错的默认选择,但是 Pandas DataFrame 会一次全部加载到内存中,这确实会限制您可以处理的数据集的大小。Dask 数据帧没有这个限制;Dask 定义了块并且不需要一次将它们全部加载。我们经常使用 Datashader+Dask 和 Parquet 等基于分块的文件格式来处理比内存容量大得多的数据集;参见例如https://examples.pyviz.org/nyc_taxi/dashboard.html(但删除.persist()以使其在核心之外运行)。Dask.DataFrame有一个read_sql_table方法,但我还没有验证它是否像 Parquet 那样在核心之外运行;如果是的话,你应该做生意!

于 2020-06-12T22:31:04.817 回答