2017-10-18 1 views
0

Ich versuche, einen zufälligen Gesamtstrukturklassifizierer mit pyspark.ml-Bibliothek für Datenrahmen (nicht mllib für RDD) zu erstellen. Muss ich die Pipeline verwenden, wie in der Dokumentation angegeben? Ich möchte nur ein einfaches Modell konstruieren,Random Forest mit pyspark.ml für Datenrahmen

rf = RandomForestClassifier(labelCol = labs, featuresCol = rawdata) 

Ich laufe in den folgenden Fehler

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/spark/python/pyspark/__init__.py", line 104, in wrapper 
    return func(self, **kwargs) 
    File "/usr/lib/spark/python/pyspark/ml/classification.py", line 910, in __init 
__ 
    self.setParams(**kwargs) 
    File "/usr/lib/spark/python/pyspark/__init__.py", line 104, in wrapper 
    return func(self, **kwargs) 
    File "/usr/lib/spark/python/pyspark/ml/classification.py", line 928, in setPar 
ams 
    return self._set(**kwargs) 
    File "/usr/lib/spark/python/pyspark/ml/param/__init__.py", line 421, in _set 
    raise TypeError('Invalid param value given for param "%s". %s' % (p.name, e) 
) 
TypeError: Invalid param value given for param "labelCol". Could not convert <cl 
ass 'pyspark.sql.dataframe.DataFrame'> to string type 

Eine Probe meiner Etiketten

+---+ 
| _2| 
+---+ 
|0.0| 
|1.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|1.0| 
|1.0| 
|1.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|0.0| 
|1.0| 
|1.0| 
+---+ 

Meine Daten mit 180 Spalten ähnlich ist.

+0

Sie müssen Pipelines nicht benutzen. Für weitere Hilfe, bitte geben Sie ein Beispiel Ihrer Daten – desertnaut

+0

Ich habe den Beitrag bearbeitet. Vielen Dank. – Nivi

Antwort

1

Spark-Datenrahmen werden nicht so in Spark ML verwendet; All Ihre Funktionen müssen Vektoren in einer einzigen Spalte sein, in der Regel (aber nicht unbedingt) mit dem Namen . Plus, labelcol=labs bedeutet, dass Ihre Etiketten in einer Spalte mit dem Namen labs sein müssen, und nicht _2.

Hier ist ein Beispiel, die Idee zu bekommen, mit den Daten Spielzeug:

spark.version 
# u'2.2.0' 

from pyspark.ml.classification import RandomForestClassifier 
from pyspark.ml.linalg import Vectors 
df = sqlContext.createDataFrame([ 
    (0.0, Vectors.dense(0.0, 1.0)), 
    (1.0, Vectors.dense(1.0, 0.0))], 
    ["label", "features"]) 

df.show() # notice there are only 2 columns, and 'features' is a 2-d vector 
# +-----+---------+ 
# |label| features| 
# +-----+---------+ 
# | 0.0|[0.0,1.0]| 
# | 1.0|[1.0,0.0]| 
# +-----+---------+ 

rf = RandomForestClassifier(numTrees=3, maxDepth=2, labelCol="label", seed=42) 
rf_model = rf.fit(df) 

This answer of mine hilfreich sein können, wie Sie Ihre Daten in das gewünschte Format zu konvertieren.

+0

Ich habe versucht, das zu tun, aber bekomme den folgenden Fehler. in _parse_basic_datatype_string raise ValueError ("konnte Datentyp nicht analysieren:% s"% s) ValueError: konnte Datentyp nicht analysieren: features – Nivi

+0

@Nivi Kann nicht viel davon machen ... Ich schlage vor, Sie sammeln das Zeug und öffnen ein neues Frage mit den Details – desertnaut