【问题标题】:PySpark 2: KMeans The input data is not directly cachedPySpark 2: KMeans 输入数据不直接缓存
【发布时间】: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 仍然会警告我呢?

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql k-means


    【解决方案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

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

      【讨论】:

      猜你喜欢
      • 2018-01-22
      • 2018-05-27
      • 2019-11-12
      • 2018-04-23
      • 2022-01-26
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多