2016-05-16 127 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个参数。请帮助。 –