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:使用从 kafka 检索到的数据训练 kmeans 流式传输