使用 scala 进行 Spark mllib 分类

Spark mllib Classification using scala

我是 Spark 基础架构的新手,所以这个问题可能很愚蠢。我使用 mllib 进行文本分类。我有一组带有标签的句子,我将其提供给 MultinomialNaiveBayes 分类器进行训练。我找到了一个例子。

我的输入是这样的:

Wed Dec 31 23:13:30 +0000 2014,1,spending new years eve,0

Wed Dec 31 23:14:37 +0000 2014,1,bold angel,0

Wed Dec 31 23:14:53 +0000 2014,1,loren good give,0

var htf = new HashingTF(2000000)
val parsedData = data.map { line =>
      val parts = line.split(',')
      LabeledPoint(parts(1).toDouble, htf.transform(parts(2).split(' ')))
    }
val model = NaiveBayes.train(parsedData, lambda = 1.0, modelType = "multinomial")

所以我获取文本并使用哈希函数将术语映射到标签{0,1}。训练结束后,我想预测未标记数据集的标签。所以这里开始我的实际问题。

我没有文本文档的标签,所以无法创建 LabeledPoints。我试着给 "random" 值(双)作为这样的标签(未标记的数据存储在不同的结构中,第(7)部分是这里的文本):

val testing = sc.textFile("neutralSegment.txt")
val parsedData = testing.map { line =>
  val parts = line.split(',')
  htf.transform(parts(7).split(' '))
}
val predictionAndLabel = parsedData.map(p => (model.predict(p)))

如何将处理后的数据提取到包括标签在内的原始形式?分类器生成标签并且术语已转换为双精度。我只想将原始字符串与分类器生成的标签连接起来。鉴于此输入:

16800,Wed Dec 31 23:03:23 +0000 2014,null,DJVINCE1 on now till 8 with your New Year's Eve Countdown mix!!,0,neutral,null,djvince now till new year eve countdown mix

如何将生成的标签映射到此输入以获得这样的输出:

16800,Wed Dec 31 23:03:23 +0000 2014,null,DJVINCE1 on now till 8 with your New Year's Eve Countdown mix!!,0,neutral,null,djvince now till new year eve countdown mix, label{0,1}

好吧,看来我所要做的就是创建元组,包括我的原始文本和哈希函数中的 Vector[Double]:

val parsedData = testing.map { line =>
  val parts = line.split(',')
  val text = parts(7).split(' ')
  (line, htf.transform(text))
} 

然后将它们提供给分类器并再次创建结果加上文本的元组。现在我可以使用包含我想要的两个字段的结构。

val predictionAndLabel2 = parsedData.map(p =>
  (p._1 , model.predict(p._2))
)