0

Zeppelinノートブックのスパークを使用して、私は昨日からこのエラーが発生しました。 は、ここに私のコードです:IllegalArgumentException:kmeans.fitでu'requirement failed 'が発生しました

from pyspark.ml.clustering import KMeans 
from pyspark.ml.feature import VectorAssembler 

df = sqlContext.table("rfmdata_clust") 

k = 4 

# Set Kmeans input/output columns 
vecAssembler = VectorAssembler(inputCols=["v1_clust", "v2_clust", "v3_clust"], outputCol="features") 
featuresDf = vecAssembler.transform(df) 

# Run KMeans 
kmeans = KMeans().setInitMode("k-means||").setK(k) 
model = kmeans.fit(featuresDf) 
resultDf = model.transform(featuresDf) 

# KMeans WSSSE 
wssse = model.computeCost(featuresDf) 
print("Within Set Sum of Squared Errors = " + str(wssse)) 

そして、ここでエラーです:

Traceback (most recent call last): 
    File "/tmp/zeppelin_pyspark-8890997346928959256.py", line 346, in <module> 
    raise Exception(traceback.format_exc()) 
Exception: Traceback (most recent call last): 
    File "/tmp/zeppelin_pyspark-8890997346928959256.py", line 334, in <module> 
    exec(code) 
    File "<stdin>", line 8, in <module> 
    File "/usr/lib/spark/python/pyspark/ml/base.py", line 64, in fit 
    return self._fit(dataset) 
    File "/usr/lib/spark/python/pyspark/ml/wrapper.py", line 236, in _fit 
    java_model = self._fit_java(dataset) 
    File "/usr/lib/spark/python/pyspark/ml/wrapper.py", line 233, in _fit_java 
    return self._java_obj.fit(dataset._jdf) 
    File "/usr/lib/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__ 
    answer, self.gateway_client, self.target_id, self.name) 
    File "/usr/lib/spark/python/pyspark/sql/utils.py", line 79, in deco 
    raise IllegalArgumentException(s.split(': ', 1)[1], stackTrace) 
IllegalArgumentException: u'requirement failed' 

エラーがスローラインはkmeans.fit()です。 rfmdata_clustデータフレームをチェックしましたが、それは全く変わっていないようです。

df.printSchema()ができます:

root 
|-- id: string (nullable = true) 
|-- v1_clust: double (nullable = true) 
|-- v2_clust: double (nullable = true) 
|-- v3_clust: double (nullable = true) 

featuresDf.printSchema()ができます:

root 
|-- id: string (nullable = true) 
|-- v1_clust: double (nullable = true) 
|-- v2_clust: double (nullable = true) 
|-- v3_clust: double (nullable = true) 
|-- features: vector (nullable = true) 

他の興味深い点はfeaturesDfの定義の下にfeaturesDf = featuresDf.limit(10000)を追加すると、コードがエラーなしで実行させることです。たぶんデータのサイズに関係しているのでしょうか?

答えて

1

うまくいけば、これが解決されていた、いない場合は、この

df=df.na.fill(1) 

を試してみてくださいこれはもちろん、あなたが他の値を選択することができ、1にNaNを持つすべての値を記入します。 このエラーは、フィーチャベクターにNaNがあることが原因です。 必要なパッケージをインポートする必要があります。 Thisもお手伝いください。

これが失敗した場合はお知らせください。

+0

ご回答いただきありがとうございます。はい、問題は解決されました。そうです、1つか2つのNaN値が原因です。データフレームを制限して動作していたと説明しています。 – Romain

関連する問題