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

Posted

技术标签:

【中文标题】pyspark 中的 K-means 在 jupyter notebook 中无限运行,在 zeppelin notebook 中运行良好【英文标题】:K-means in pyspark runing infinitely in jupyter notebook, works fine in zepplin notebook 【发布时间】:2021-04-02 09:33:36 【问题描述】:

我正在 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 列,所以这不是大小相关的问题。在这两种情况下,数据都是标准化的,但我认为问题必须出在数据处理中。谁能帮我这个?如果需要任何其他信息,请在 cmets 中告诉我,我会回答或编辑问题。

编辑:

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

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

【问题讨论】:

你能说明data是如何创建的吗? @mck 编辑了问题! 您的代码 sn-p 充满了未定义的变量 - 请提供最小的、可重现的示例代码。 @mck 我已经意识到问题可能不在于数据格式或特征。我相应地编辑了问题、标题和标签 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于pyspark 中的 K-means 在 jupyter notebook 中无限运行,在 zeppelin notebook 中运行良好的主要内容,如果未能解决你的问题,请参考以下文章

通过 Pyspark 查询 Hive 返回空结果

将 Pyspark Python k-means 模型预测插入具有原始 RDD 项和特征的 DF

Pyspark Dataframes:创建要在 python 中的聚类中使用的特征列

如何使用PySpark将SparseVector中的前X个单词转换为字符串数组

使用 k-means 聚类时如何设置 spark 配置以减少洗牌?

在 Apache Spark Python 中自定义 K-means 的距离公式