gpt4 book ai didi

python - Spark k-means OutOfMemoryError 异常

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:54 30 4
gpt4 key购买 nike

我在 Ml 模块下使用 Spark 的 k-means 聚类,并且在 PySpark 中编程。该模块在 200 个集群之前运行良好,但一旦超过 300 个集群或更多,它就会给出 OutOfMemoryError 。我的数据包含 200k 个对象,每个对象有 25k 个特征。我遵循链接 pyspark ML mocumentation 中的 class pyspark.ml.clustering.KMeans 下提到的指南。本文档中提到的代码与我的代码之间的唯一区别是我使用稀疏向量而不是密集向量。

没有硬件限制,因为我有一个相当大的集群设置,有超过 700 个核心和 2TB 内存。我搜索了这个问题,大多数链接引导我进行以下一项/全部配置。以下是我尝试过的一系列事情:

  • 使用 conf.set("spark.driver.memory", "64g") 设置/增加驱动程序内存
  • 设置并行度conf.set("spark.default.parallelism","1000")
  • 设置/增加内存分数conf.set("spark.storage.memoryFraction", "1")

除了上述配置之外,我还将执行器内存设置为 16g核心设置为 150。不幸的是,没有任何效果,我不断收到以下错误(错误被截断) )。

Py4JJavaError: An error occurred while calling o98.fit. : java.lang.OutOfMemoryError: Java heap space at org.apache.spark.mllib.linalg.SparseVector.toArray(Vectors.scala:678) at org.apache.spark.mllib.clustering.VectorWithNorm.toDense(KMeans.scala:612)

这是否意味着 Spark 甚至无法处理 300+ 簇大小的 200k*25K 数据集?或者我错过了什么?

最佳答案

org.apache.spark.mllib.clustering.VectorWithNorm.toDense(KMeans.scala:612)

这就是问题所在。聚类中心被转换为密集表示,然后广播给所有执行器。这无法扩展数千个功能,这就是您的情况。结账SparseML .

关于python - Spark k-means OutOfMemoryError 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37901846/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com