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

Posted

技术标签:

【中文标题】将数据着色器与 PySpark DataFrame 一起使用【英文标题】:Using datashader with PySpark DataFrame 【发布时间】:2017-09-03 22:50:17 【问题描述】:

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

我也知道,仅获取接送经度和纬度将使数据帧达到约 30GB。但这并不能改变问题。

我在 datashader GitHub 上创建了一个问题 Datashader issue opened

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

感谢您的建议!

【问题讨论】:

【参考方案1】:

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

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

这与 datashader 配合得特别好,它知道如何使用 Dask 计算其聚合,因此您可以处理大于内存的数据集,可能跨集群计算 - 所有这些都无需火花。

datashader examples 包含 Dask 和 NYC 出租车示例(但不幸的是,两者并没有放在一起)。

【讨论】:

是的,我搬到了 Dask,与 Parquet 相结合真是太棒了!希望有一天能支持 Pyspark 数据框,以便 Spark 用户可以直接使用数据着色器!【参考方案2】:

这与 Dask 不同..

我想说,使用 spark 可视化此类数据的最佳方法是使用 zeppelin。很容易安装https://zeppelin.apache.org/。您有可以与 spark 一起使用的默认可视化。看看吧。

【讨论】:

以上是关于将数据着色器与 PySpark DataFrame 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

PySpark:将字典数据附加到 PySpark DataFrame

Pyspark:由于数据类型 str 而不是 StringType,无法将 RDD 转换为 DataFrame

通过 pyspark.sql.dataframe 将 XML 数据转换为 pandas 数据帧

Pyspark:将 pyspark.sql.row 转换为 Dataframe

将 numpy 数组转换为 pyspark 中的 DataFrame 以导出为 csv

将 pyspark groupedData 转换为 pandas DataFrame