python - Pyspark KMeans 聚类特性专栏 IllegalArgumentException

标签 python pyspark

pyspark==2.4.0

这是给出异常的代码:

LDA = spark.read.parquet('./LDA.parquet/')
LDA.printSchema()

from pyspark.ml.clustering import KMeans
from pyspark.ml.evaluation import ClusteringEvaluator

kmeans = KMeans(featuresCol='topic_vector_fix_dim').setK(15).setSeed(1)
model = kmeans.fit(LDA)


|-- Id: string (nullable = true)
|-- topic_vector_fix_dim: array (nullable = true)
| |-- 元素:double (containsNull = true)

非法参数异常: '要求失败:列 topic_vector_fix_dim 的类型必须等于以下类型之一:[struct < type:tinyint,size:int,indices:array < int >,values:array < double >>, array < double >, array < float > ] 但实际上是 array < double > 类型。'

我很困惑 - 它不喜欢我的 array <double> ,但说它可能是输入。
topic_vector_fix_dim 的每个条目都是一维 float 组

最佳答案

features 列的

containsNull 应设置为 False:

new_schema = ArrayType(DoubleType(), containsNull=False)
udf_foo = udf(lambda x:x, new_schema)
LDA = LDA.withColumn("topic_vector_fix_dim",udf_foo("topic_vector_fix_dim"))

之后一切正常。

关于python - Pyspark KMeans 聚类特性专栏 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55162989/

相关文章:

python - 计算两个字符串之间的差异

python - 为什么我的代码中会出现 Control NotFoundError?

python - 动态打印一行

mongodb - PySpark MongoDB::java.lang.NoClassDefFoundError:com/mongodb/client/model/Collat​​ion

python - 在本地和 Yarn 模式下运行 PySpark 的参数化 pytest fixture

python - 如何在 Python 中使用 SSL 和身份验证连接到 SOAP 服务(没有 WSDL)?

python - 在 Raspberry pi 上安装 Informix Client SDK

python - 从 Pyspark LDA 模型中提取文档主题矩阵

apache-spark - 无法使用 pyspark 从 json 读取数据

java - 将 scala.collection.Seq<String> 的 Java 对象转换为 python 列表