2016-10-30 14 views
4

私はspark(pysparkを使用して)の新しいです。私はhere (link)から決定木のチュートリアルを実行しようとしました。私は、コードを実行します。Pyspark、Decision Trees(スパーク2.0.0)

from pyspark.ml import Pipeline 
from pyspark.ml.classification import DecisionTreeClassifier 
from pyspark.ml.feature import StringIndexer, VectorIndexer 
from pyspark.ml.evaluation import MulticlassClassificationEvaluator 
from pyspark.mllib.util import MLUtils 

# Load and parse the data file, converting it to a DataFrame. 
data = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt").toDF() 
labelIndexer = StringIndexer(inputCol="label", outputCol="indexedLabel").fit(data) 

# Now this line fails 
featureIndexer =\ 
    VectorIndexer(inputCol="features", outputCol="indexedFeatures", maxCategories=4).fit(data) 

私は、エラーメッセージが出ます: はIllegalArgumentException:u'requirementに失敗しました:カラムの機能はタイプ[email protected]でなければなりませんが、実際に組織されたが。 [email protected]。 '

use from pyspark.ml.linalg import Vectors, VectorUDT 
instead of 
from pyspark.mllib.linalg import Vectors, VectorUDT 

私はそれを使用していないことから、奇数である:このエラーをグーグルとき

は、私が言うの答えを見つけました。また、このインポートを自分のコードに追加すると、何も解決されず、同じエラーが発生します。

このような状況をデバッグする方法についてはっきりしていません。生データに見たとき、私は以下を参照してください。

data.show() 
+--------------------+-----+ 
|   features|label| 
+--------------------+-----+ 
|(692,[127,128,129...| 0.0| 
|(692,[158,159,160...| 1.0| 
|(692,[124,125,126...| 1.0| 
|(692,[152,153,154...| 1.0| 

これは、リストのように見えるが、「(」で始まる

私はこの問題、あるいはデバッグ... 提案を解決する方法がわかりません私が間違っているの何にとして?

おかげ

+0

どのバージョンのスパークを使用していますか? – Yaron

+0

私はスパーク2.0.0を使用しています – Ruslan

答えて

5

問題の原因はスパーク2.0.0に火花1.5.2。例を実行しているようだ(2.0例を刺激するための基準以下を参照)。

スパーク2.0のようspark.mlとspark.mllib

との差は、spark.mllibパッケージのRDDベースのAPIは、保守モードに入っています。 Sparkの主要なLearning APIは、Spark.mlパッケージのDataFrameベースのAPIになりました。

詳細はここで見つけることができます:スパーク2.0を使用してhttp://spark.apache.org/docs/latest/ml-guide.html

「の例/ srcに/メインで完全なサンプルコードを検索スパーク2.0.0例https://spark.apache.org/docs/2.0.0/mllib-decision-tree.html

from pyspark.mllib.tree import DecisionTree, DecisionTreeModel 
from pyspark.mllib.util import MLUtils 

# Load and parse the data file into an RDD of LabeledPoint. 
data = MLUtils.loadLibSVMFile(sc, 'data/mllib/sample_libsvm_data.txt') 
# Split the data into training and test sets (30% held out for testing) 
(trainingData, testData) = data.randomSplit([0.7, 0.3]) 

# Train a DecisionTree model. 
# Empty categoricalFeaturesInfo indicates all features are continuous. 
model = DecisionTree.trainClassifier(trainingData, numClasses=2, categoricalFeaturesInfo={}, 
            impurity='gini', maxDepth=5, maxBins=32) 

# Evaluate model on test instances and compute test error 
predictions = model.predict(testData.map(lambda x: x.features)) 
labelsAndPredictions = testData.map(lambda lp: lp.label).zip(predictions) 
testErr = labelsAndPredictions.filter(lambda (v, p): v != p).count()/float(testData.count()) 
print('Test Error = ' + str(testErr)) 
print('Learned classification tree model:') 
print(model.toDebugString()) 

# Save and load model 
model.save(sc, "target/tmp/myDecisionTreeClassificationModel") 
sameModel = DecisionTreeModel.load(sc, "target/tmp/myDecisionTreeClassificationModel") 

を試してみてくださいSparkリポジトリの/python/mllib/decision_tree_classification_example.py "

+0

少しばかげて感じる。私はちょうどバージョンに注意を払っていない。ありがとう! – Ruslan

関連する問題