使用LabeledPoint.parse解决错误

时间:2018-08-17 17:46:54

标签: scala apache-spark apache-spark-mllib

我是Spark的新手,正在尝试以下示例:

import org.apache.spark.SparkConf
import org.apache.spark.mllib.clustering.StreamingKMeans
import org.apache.spark.mllib.linalg.{Vectors,Vector}
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.streaming.{Seconds, StreamingContext}

object App {
def main(args: Array[String]) {
if (args.length != 5) {
  System.err.println(
    "Usage: StreamingKMeansExample " +
      "<trainingDir> <testDir> <batchDuration> <numClusters> <numDimensions>")
  System.exit(1)
}

// $example on$
val conf = new SparkConf().setAppName("StreamingKMeansExample")
val ssc = new StreamingContext(conf, Seconds(args(2).toLong))

val trainingData = ssc.textFileStream(args(0)).map(Vectors.parse)
val testData = ssc.textFileStream(args(1)).map(LabeledPoint.parse)

val model = new StreamingKMeans()
  .setK(args(3).toInt)
  .setDecayFactor(1.0)
  .setRandomCenters(args(4).toInt, 0.0)

model.trainOn(trainingData)
model.predictOnValues(testData.map(lp => (lp.label, lp.features))).print()

ssc.start()
ssc.awaitTermination()
// $example off$
}
}

但是它无法解析LabeledPoint.parse,它仅具有适用和未应用的方法,无法解析。

可能是我使用的版本。这是我的sbt

name := "myApp"
version := "0.1"
scalaVersion := "2.11.0"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.2.0" % "provided",
"org.apache.spark" %% "spark-streaming" % "2.2.0",
"org.apache.spark" %% "spark-mllib" % "2.3.1"
)

编辑,所以我创建了一个自定义的labelPoint类,因为没有其他工作器能够解决编译问题。但是,我尝试运行它,并且预测值始终为零。 火车的输入txt是

[36.72, 67.44]
[92.20, 11.81]
[90.85, 48.07]
 .....

,测试txt是

(2, [9.26,68.19])
(1, [3.27,9.14])
(9, [66.66,13.85])
 ....

那么为什么结果值是2,0 1,0 9,0? labeledPoint是否有问题?

0 个答案:

没有答案