2017-06-21 5 views
0

データフレームからLabeledPointのRDDを作成しようとしていますので、後でMlLibに使用できます。pyspark MlLib:行の列の値を除外します

my_targetの列がsparkDFの最初の列の場合、以下のコードは正常に動作します。ただし、my_target列が最初の列でない場合は、my_targetを除外して正しいLabeledPointを作成するために、以下のコードを変更するにはどうすればよいですか?ある

import pyspark.mllib.classification as clf 
labeledData = sparkDF.rdd.map(lambda row: clf.LabeledPoint(row['my_target'],row[1:])) 

logRegr = clf.LogisticRegressionWithSGD.train(labeledData) 

row[1:]は今最初の列の値を除外する。行の列Nの値を除外したい場合は、どうすればよいですか?ありがとう!

答えて

1
>>> a = [(1,21,31,41),(2,22,32,42),(3,23,33,43),(4,24,34,44),(5,25,35,45)] 
>>> df = spark.createDataFrame(a,["foo","bar","baz","bat"]) 
>>> df.show() 
+---+---+---+---+ 
|foo|bar|baz|bat| 
+---+---+---+---+ 
| 1| 21| 31| 41| 
| 2| 22| 32| 42| 
| 3| 23| 33| 43| 
| 4| 24| 34| 44| 
| 5| 25| 35| 45| 
+---+---+---+---+ 

>>> N = 2 
# N is the column that you want to exclude (in this example the third, indexing starts at 0) 
>>> labeledData = df.rdd.map(lambda row: LabeledPoint(row['foo'],row[:N]+row[N+1:])) 
# it is just a concatenation with N that is excluded both in row[:N] and row[N+1:] 

>>> labeledData.collect() 
[LabeledPoint(1.0, [1.0,21.0,41.0]), LabeledPoint(2.0, [2.0,22.0,42.0]), LabeledPoint(3.0, [3.0,23.0,43.0]), LabeledPoint(4.0, [4.0,24.0,44.0]), LabeledPoint(5.0, [5.0,25.0,45.0])] 
関連する問題