首页 > 解决方案 > pyspark 中的 K-means 在 jupyter 笔记本中无限运行,在 zepplin 笔记本中运行良好

问题描述

我在 pyspark 中运行 k-means 算法:

from pyspark.ml.clustering import KMeans
from pyspark.ml.clustering import KMeansModel
import numpy as np
kmeans_modeling = KMeans(k = 3, seed = 0)
model = kmeans_modeling.fit(data.select("parameters"))

数据是一个 pyspark sql 数据框:pyspark.sql.dataframe.DataFrame

但是,该算法是无限运行的(对于数据帧中的数据量而言,它所花费的时间比预期的要长得多)。

有谁知道是什么导致算法表现得像这样?我为相同类型的不同数据框运行了这个确切的代码,一切正常。

我之前使用的数据集(有效)有 72020 行和 35 列,而现在的数据集有 60297 行和 31 列,所以这不是大小相关的问题。在这两种情况下,数据都是标准化的,但我认为问题必须出在数据处理中。谁能帮我这个?如果需要任何其他信息,请在评论中告诉我,我将回答或编辑问题。

编辑:

这是我可以展示的关于创建数据的内容:

aux1 = temp.filter("valflag = 0")
sample = spark.read.option("header", "true").option("delimiter", ",").csv("gs://LOCATION.csv").select("id")

data_pre = aux1.join(sample, sample["sample"] == aux1["id"], "leftanti").drop("sample")

data_pre.createOrReplaceTempView("data_pre")
data_pre = spark.table("data_pre")
data_pre = data.withColumn(col, functions.col(col).cast("double"))
data_pre = data_pre.na.fill(0)
data = vectorization_function(df = data_pre, inputCols = inputCols, outputCol = "parameters")

编辑 2:我无法提供有关数据的其他信息,但我现在意识到该算法在 zepplin 笔记本中运行没有问题,但在 jupyter 笔记本中不起作用;我已经相应地编辑了标签和标题。有谁知道为什么会发生这种情况?

标签: pysparkjupyter-notebookcluster-analysisk-meansapache-zeppelin

解决方案


这是一些关于在 Spark 中运行集群作业的文档。

https://spark.apache.org/docs/latest/ml-clustering.html

这是另一个非常相似的想法。

https://spark.apache.org/docs/latest/mllib-clustering.html


推荐阅读