Spark HashingTF结果说明

mce*_*aya 6 scala apache-spark apache-spark-ml apache-spark-mllib

我在DataBricks上尝试了标准的spark HashingTF示例.

import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer}

val sentenceData = spark.createDataFrame(Seq(
  (0, "Hi I heard about Spark"),
  (0, "I wish Java could use case classes"),
  (1, "Logistic regression models are neat")
)).toDF("label", "sentence")

val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
val wordsData = tokenizer.transform(sentenceData)
val hashingTF = new HashingTF()
  .setInputCol("words").setOutputCol("rawFeatures").setNumFeatures(20)
val featurizedData = hashingTF.transform(wordsData)
display(featurizedData)
Run Code Online (Sandbox Code Playgroud)

我对下面的理解结果很不满意. 请参阅图像 当numFeatures为20时

[0,20,[0,5,9,17],[1,1,1,2]]
[0,20,[2,7,9,13,15],[1,1,3,1,1]]
[0,20,[4,6,13,15,18],[1,1,1,1,1]]
Run Code Online (Sandbox Code Playgroud)

如果[0,5,9,17]是哈希值
而[1,1,1,2 ]是频率.
17具有频率2
9有3(它有2)
13,15有1而它们必须有2.

可能我错过了一些东西.找不到详细解释的文档.

小智 0

你的猜测是正确的:

  • 20 - 是向量大小
  • 第一个列表是索引列表
  • 第二个列表是值列表

前导 0 只是内部表示的产物。

这里没有什么可以学习的了。