HDFS 文件作为 Spark Mllib 的输入
HDFS Files as input to Spark Mllib
教程中的所有示例都使用 LibSVM 格式的文件作为 Spark Mllib 的输入。(http://spark.apache.org/docs/latest/mllib-ensembles.html)
数据=MLUtils.loadLibSVMFile(sc,'data/mllib/sample_libsvm_data.txt')
但我在 HDFS 上有一个包含数百万行的文件,我想使用 PySpark 将其作为 Spark MLLib 的输入,但我不想将其转换为 libsvm 格式。
谁能指导我怎么做?
通常,当您在 MLLib 中给输入一个算法时,您会创建一个特定数据类型的 rdd(比如 LabeledPoint 或向量。)MLUtils.loadLibSVMFile 会为您将数据转换为 labeledpoint RDD。
您可以直接将数据转换为算法需要的任何格式,然后将生成的 RDD 作为 MLLib 算法的输入。
我同意@Rishi 的观点,但有一些补充 -
LibSVM 格式表示一个org.apache.spark.mllib.regression.LabeledPoint
,它包含一个标签和一个特征向量。如果您没有 LibSVM 格式的数据,那么您可以通过构建一个具有 LabeledPoint
类型列的数据框来创建它。
val trainingData = spark.read.text (<path to data folder or file>)
val trainingLabelPoints = trainingData.map { row =>
//LabeledPoint(<Label as a Double>, Vectors.sparse(....) )
LabeledPoint(row.getAs[Double]("column 1"), Vectors.sparse(row.getAs[Double]("column 2")...)
}.toDF("labelpoints")
//trainingLabelPoints can be used for input to a Mllib library
K-mean 等聚类算法不需要 LabelPoints,只需一个 Vector 列就足够了。
一些分类算法,如 LinearSVN 可以采用 2 列 - 标签和特征向量,LabelPoint 也可以。
如果训练文档中有单词,则可以使用 org.apache.spark.ml.feature.Word2Vec 将单词转换为向量。
所以你有很多选择。
教程中的所有示例都使用 LibSVM 格式的文件作为 Spark Mllib 的输入。(http://spark.apache.org/docs/latest/mllib-ensembles.html)
数据=MLUtils.loadLibSVMFile(sc,'data/mllib/sample_libsvm_data.txt')
但我在 HDFS 上有一个包含数百万行的文件,我想使用 PySpark 将其作为 Spark MLLib 的输入,但我不想将其转换为 libsvm 格式。
谁能指导我怎么做?
通常,当您在 MLLib 中给输入一个算法时,您会创建一个特定数据类型的 rdd(比如 LabeledPoint 或向量。)MLUtils.loadLibSVMFile 会为您将数据转换为 labeledpoint RDD。
您可以直接将数据转换为算法需要的任何格式,然后将生成的 RDD 作为 MLLib 算法的输入。
我同意@Rishi 的观点,但有一些补充 -
LibSVM 格式表示一个org.apache.spark.mllib.regression.LabeledPoint
,它包含一个标签和一个特征向量。如果您没有 LibSVM 格式的数据,那么您可以通过构建一个具有 LabeledPoint
类型列的数据框来创建它。
val trainingData = spark.read.text (<path to data folder or file>)
val trainingLabelPoints = trainingData.map { row =>
//LabeledPoint(<Label as a Double>, Vectors.sparse(....) )
LabeledPoint(row.getAs[Double]("column 1"), Vectors.sparse(row.getAs[Double]("column 2")...)
}.toDF("labelpoints")
//trainingLabelPoints can be used for input to a Mllib library
K-mean 等聚类算法不需要 LabelPoints,只需一个 Vector 列就足够了。 一些分类算法,如 LinearSVN 可以采用 2 列 - 标签和特征向量,LabelPoint 也可以。 如果训练文档中有单词,则可以使用 org.apache.spark.ml.feature.Word2Vec 将单词转换为向量。
所以你有很多选择。