火花执行器中的KMeans非常慢

时间:2019-01-07 21:19:05

标签: apache-spark cpu yarn k-means

我有一个迭代过程,其中将KMeans循环应用到一堆数据集中,并保存结果。由于这是循环执行的,因此需要更长的时间。 我已将其转换为spark作业,其中每个数据集是spark数据帧的一个分区,并且KMeans并行应用于每个数据集。此火花作业在YARN之上运行。 我必须编写一个在每个数据框分区上运行KMeans(scikit learning)的映射函数。

请注意,我不在这里使用Spark ML的Kmeans。

但是,从本地python运行时,KMeans可以在几秒钟内运行,但是在pyspark执行程序内部,运行大约需要10分钟。

我有一个有趣的观察,当KMeans从python驱动程序运行时,它消耗大量CPU,并在5秒钟内完成。 当在映射函数中运行相同的代码时,它不会占用太多CPU,并且运行速度非常慢。我怀疑这是因为每个spark执行程序都获得了一定数量的内存和cpu(vcores)。分配给spark执行程序的CPU数量有限,这使过程变慢。

传递给KMeans的num_iter,num_clusters,n_init等参数在两种情况下都是相同的。

有没有办法提高这段代码的速度?

0 个答案:

没有答案