将数据着色器与 PySpark DataFrame 一起使用

Using datashader with PySpark DataFrame

我想绘制 200 Gb 的 NYC taxi Dataset。 我设法使用数据着色器 plot/visualize pandas 数据帧。 但是我没有设法使用 PySpark 数据框(使用一个 4 节点集群,每个节点上有 8Gb RAM)来完成它。不过,我能做的是使用 .toPandas() 方法将 PySpark 数据帧转换为 Pandas 数据帧。但这会将整个数据帧加载到驱动程序节点上的 RAM 中(没有足够的 RAM 来容纳整个数据集),因此不会利用 Spark 的分布式功能。

我也知道,仅获取上车和下车的经度和纬度将使数据帧达到约 30GB。但这并没有改变问题。

我在此处 Datashader issue opened

创建了一个关于数据着色器 GitHub 的问题

我已将 Dask 视为替代方案,但似乎尚不支持转换 PySpark 数据帧 -> Dask 数据帧。

感谢您的建议!

确实,没有直接的方法可以将(分布式)pyspark 数据帧转换为 Dask 数据帧。然而,Dask 是它自己的执行引擎,如果你愿意,你应该能够完全避开 spark。 Dask 能够以类似于 spark 的方式从远程数据源(例如 S3)从 CSV 加载数据集,这可能看起来像:

df = dask.dataframe.read_csv('s3://bucket/path/taxi*.csv')

这与数据着色器一起使用效果特别好,它知道如何使用 Dask 计算其聚合,因此您可以处理大于内存的数据集,可能跨集群计算 - 所有这些都不会产生火花。

datashader examples 包含 Dask 和 NYC 出租车示例(但不幸的是,它们并不在一起)。

这与 Dask 有所不同..

我想说用 spark 可视化此类数据的最佳方法是使用 zeppelin。安装很容易https://zeppelin.apache.org/。您拥有可与 spark 一起使用的默认可视化效果。检查一下。