2016-05-16 132 views

回答

0

如果您的數據是RDD,您可以撥打方法:saveAsLibSVMFile(rdd, path)它是apache.spark.mllib.util.MLUtils包的一部分。

對於官方文檔看:https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.mllib.util.MLUtils $

這裏是Scala的例子假設你已經將您的分類數據爲二進制的特點:(你可以做同樣的Python或Java的太)

val responseData=sc.textFile("response.txt") 
val responseValue = responseData.map(line => line.trim().split(" ").map(_.toDouble)) 

val featuresData=sc.textFile("features.txt") 
val featuresValue = featuresData.map(line => { 
    val featureInt = line.trim().toInt 
}) 

val data = featuresValue.zip(featuresData).map(
    line => LabeledPoint(line._1, Vectors.dense(line._2)) 
) 

saveAsLibSVMFile(data, "data.libsvm") 

如果你想要的PySpark版本,沒有測試過這個,但類似:

from pyspark.mllib.linalg import SparseVector 
from pyspark.mllib.regression import LabeledPoint 

responseData=sc.textFile("response.txt") 
responseValue = responseData.map(lambda line: map(lambda x: Decimal(x), line.strip().split(" "))) 
# for clarity you can also extract the lambda into a function 

featuresData=sc.textFile("features.txt") 
featuresValue = featuresData.map(lambda line: Int(line.strip())) 

mtx = zip(featuresValue.collect(),featuresData.collect()) 
data = map(lambda line: LabeledPoint(line[0], Vectors.sparse(line[1]), mtx)) 

saveAsLibSVMFile(data, "data.libsvm") 
+0

什麼是features.txt只有分類數據或所有功能?並將代碼與刪除python中的所有「val」一起工作。 –

+0

所有功能。我假設你已經將分類改爲二元特徵。該代碼需要修改才能使用PySpark –

+0

謝謝。我做了一些改變,但我得到了一些錯誤的zip說,「zip參數必須支持迭代。我也試圖通過刪除zip字,但然後錯誤是地圖()必須有至少2個參數。請幫助。 –