我正在尝试使用 collect 函数将一列 pyspark 数据帧存储到 python 列表中。 例如
list_a = [row[column_name] for row in dataset_name.collect()]
但这是一个非常缓慢的过程,对于 3 列和 27 行的数据帧需要 10 多秒。
有没有更快的方法?
我尝试在此步骤之前缓存数据。通过这一步,上述查询将在 2 秒内执行,但缓存步骤本身大约需要 7-8 秒,所以我减少时间的目的并没有完全实现。
我的代码是这样的,我每次都需要在这一步之前重建数据帧,所以需要再次进行缓存,所以这一步(缓存数据帧)对减少时间没有太大帮助。
提前致谢!
最佳答案
您的代码可以通过仅收集一列数据来略微优化:
list_a = [row[column_name] for row in dataset_name.select(column_name).collect()]
如果使用 quinn,这段代码会更清晰:
import quinn
list_a = quinn.column_to_list(df, col_name)
collect()
将所有数据传输到驱动程序节点并且开销很大。您只能通过收集更少的数据来使其更快(例如 dataset_name.select(column_name).distinct().collect()
通常会更快)。
Spark 针对跨集群分布数据集和并行运行计算进行了优化。 Spark 的分布式特性使得在单个节点上收集结果的计算速度相对较慢。
关于python - 有没有更快的方法将一列 pyspark 数据框转换为 python 列表? (收集()很慢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63000596/