python - 有没有更快的方法将一列 pyspark 数据框转换为 python 列表? (收集()很慢)

标签 python python-3.x pyspark apache-spark-sql

我正在尝试使用 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/

相关文章:

python - 使用正则表达式和 python 3 在字符串中查找模式

python - 测试列表中的连续数字

python - 我不明白python日志模块如何读取其执行代码

hadoop - Spark Streaming - HBase 批量加载

python - 如果行中的其他条目匹配,则更改 Python Pandas 数据框中的条目

python - 单击按钮时如何将文件名打印到控制台?

apache-spark - 更改数据数据类型拆分后的Spark RDD如何在不更改数据类型的情况下拆分

apache-spark - 检查列是否有正确的小数

python - AppEngine HTTPS CName 似乎挂起

python - 如何使用多维交叉表/数据透视表