我正在尝试使用收集函数将一列存储到python列表中。例如:
list_a =[dataset_name.collect()中行的rowcolumn_name]
但是这是一个非常慢的过程,一个包含3列和27行的数据需要超过10秒。
是否有更快的方法可以做到?
--我试着在这个步骤之前缓存数据。使用这个步骤,上面的查询将在2秒内执行,但是缓存步骤本身大约需要7-8秒,所以我减少时间的目的不是完全填满。
而且我的代码是这样的,在这个步骤之前,我每次都需要重新构建dataframe,所以需要再次进行缓存,所以这个步骤(缓存dataframe)在时间减少方面没有多大帮助。
提前感谢!
发布于 2020-07-20 17:47:09
您的代码可以通过只收集一列数据来稍微优化:
list_a = [row[column_name] for row in dataset_name.select(column_name).collect()]如果使用奎因,则此代码更简洁。
import quinn
list_a = quinn.column_to_list(df, col_name)collect()将所有数据传输到驱动节点,而且代价很高。只有通过收集更少的数据才能使其更快(例如,dataset_name.select(column_name).distinct().collect()通常会更快)。
Spark优化用于在集群中分布数据集,并并行运行计算。Spark的分布式特性使得在单个节点上收集结果的计算相对缓慢。
https://stackoverflow.com/questions/63000596
复制相似问题