Pyspark KMeans 聚类特征列 IllegalArgumentException

Art*_*sky 5 python pyspark

pyspark==2.4.0
Run Code Online (Sandbox Code Playgroud)

这是给出异常的代码:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Art*_*sky 6

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"))
Run Code Online (Sandbox Code Playgroud)

之后一切正常。