pyspark 中的 K-means 在 jupyter notebook 中无限运行,在 zepplin notebook 中运行良好

问题描述

我在 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 笔记本中不起作用;我已经相应地编辑了标签标题。有谁知道为什么会发生这种情况?

解决方法

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...