PySpark 2: KMeans 输入数据不直接缓存

Posted

技术标签:

【中文标题】PySpark 2: KMeans 输入数据不直接缓存【英文标题】:PySpark 2: KMeans The input data is not directly cached 【发布时间】:2017-03-17 07:30:54 【问题描述】:

不知道为什么会收到这条消息

WARN KMeans: The input data is not directly cached, which may hurt performance if its parent RDDs are also uncached.

当我尝试使用 Spark KMeans

df_Part = assembler.transform(df_Part)    
df_Part.cache()
while (k<=max_cluster) and (wssse > seuilStop):
                    kmeans = KMeans().setK(k)
                    model = kmeans.fit(df_Part)
                    wssse = model.computeCost(df_Part)
                    k=k+1

它说我的输入(数据帧)没有被缓存!!

我尝试打印 df_Part.is_cached 并收到 True,这意味着我的数据帧已缓存,那么为什么 Spark 仍然会警告我呢?

【问题讨论】:

【参考方案1】:

此消息由o.a.s.mllib.clustering.KMeans 生成,如果不修补 Spark 代码,您将无能为力。

内部o.a.s.ml.clustering.KMeans

DataFrame 转换为RDD[o.a.s.mllib.linalg.Vector]。 执行o.a.s.mllib.clustering.KMeans

当您缓存DataFrame 时,内部使用的RDD 不会被缓存。这就是您看到警告的原因。虽然很烦人,但我不会太担心。

【讨论】:

【参考方案2】:

这已在 Spark 2.2.0 中修复。这是Spark-18356。

那里的讨论还表明这不是什么大问题,但修复可能会稍微减少运行时间,并避免警告。

【讨论】:

谢谢,那是我 :) 在 issues.apache.org/jira/browse/SPARK-18356 中创建该主题的人 我正在使用 Spark 2.3.0 和 Python 3.5.2,但警告仍然存在

以上是关于PySpark 2: KMeans 输入数据不直接缓存的主要内容,如果未能解决你的问题,请参考以下文章

PySpark 中的 KMeans 聚类

在 PySpark 中运行 KMeans 聚类

pyspark:使用从 kafka 检索到的数据训练 kmeans 流式传输

如何从本地目录中读取,kmeans 流式传输 pyspark

PySpark ML:获取 KMeans 集群统计信息

在 python / pyspark 中获取 k-means 质心和异常值