pandas 上 Delta Lake 内存消耗不合理

问题描述 投票:0回答:1

我正在使用 Delta Lake 开发 Databricks。

我有一个大小约为 1.9GB 的数据集(镶木地板格式)。我正在尝试将此数据集转换为增量表,并且我能够使用 Spark 成功创建此类表,没有任何问题。

该数据集用于非常标准的 ETL 管道。

但是,在我的特定用例中(由于一些遗留代码仅适用于 pandas),某些处理需要 pandas,所以我愿意做的是使用

my_pandas_df = my_delta_table.select("*").toPandas()
将我的增量表从 Spark 转换为 pandas。

代码工作正常,但我注意到由于这个命令而导致了不合理的内存消耗。

如果我使用

pandas.read_parquet()
读取原始镶木地板数据集,我的 databricks 集群上会有以下内存占用:

但是,如果我使用 Spark 读取 Delta 表,然后将其转换为 pandas,我会获得非常不同的内存占用:

您可能会注意到,对于相同的数据集,内存消耗要高得多。考虑到 Delta 在后台使用 parquet 文件,我无法理解为什么相同的相同数据的内存消耗存在如此巨大的差异。

有什么想法吗?

pandas apache-spark databricks etl delta-lake
1个回答
0
投票

最终我依靠python的delta-rs库解决了这个问题。

我运行了以下代码:

!pip install deltalake # Just to report which library I installed and how

from deltalake import DeltaTable

dt = DeltaTable("path_to_my_table/")
pandas_table = dt.to_pandas()

通过这种方式,我能够在合理的时间内将增量表转换为 pandas,而不会出现内存泄漏(5 分钟内加载 800 万行 x 400 列)

© www.soinside.com 2019 - 2024. All rights reserved.