使用 Python 将 Dask 数据帧转换为 Spark 数据帧

Posted

技术标签:

【中文标题】使用 Python 将 Dask 数据帧转换为 Spark 数据帧【英文标题】:Convert Dask Dataframe to Spark dataframe using Python 【发布时间】:2021-02-25 13:31:15 【问题描述】:

我想将 Dask Dataframe 转换为 Spark Dataframe。

让我们考虑这个例子:

import dask.dataframe as dd
dask_df = dd.read_csv("file_name.csv")

# convert dask df to spark df
spark_df = spark_session.createDataFrame(dask_df)

但这不起作用。有没有其他方法可以做到这一点。提前致谢。

【问题讨论】:

【参考方案1】:

使用 Dask 将 Spark DataFrame 写入磁盘并使用 Spark 读取它最适合更大的数据集。

以下是转换较小数据集的方法。

pandas_df = dask_df.compute()
pyspark_df = spark.createDataFrame(pandas_df) 

我不知道在没有大规模洗牌的情况下将 Dask DataFrame 转换为 Spark DataFrame 的内存方式,但这肯定是一个很酷的功能。

【讨论】:

【参考方案2】:

您最好的选择是将数据框保存到文件中,例如 parquet 格式:dask_df.to_parquet(...)。如果您的数据足够小,您可以将其完全加载到客户端并将生成的 pandas 数据帧提供给 Spark。

虽然可以将 spark 和 dask worker 放在节点上,但它们之间不会直接通信,通过客户端流式传输大数据也不是一个好主意。

【讨论】:

以上是关于使用 Python 将 Dask 数据帧转换为 Spark 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据读取到 dask 数据帧并删除坏行

在单个多核机器上索引大型 dask 数据帧时的内存使用情况

如何将单个镶木地板文件从 s3 读入 dask 数据帧?

如何将多个功能应用于dask数据帧的多个块?

使用 Dask 将大于内存的数据帧缓存到本地磁盘

从 Dask 数据帧中获取一行而不将整个数据帧加载到内存中