---
title: IDF
description: "IDF算法，提供了DF MLlib API、IDF MLlib API、IDF MLlib RDD-based API三套接口。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/bds/kunpengbdssparkml_16_0028.html
sourcePath: /source/zh/kunpengboostkithistory/2200/bds/kunpengbdssparkml_16_0028.html
indexId: 0808d4c5710cb4a3fa952b046f43bb9e46d5f7a26940fb395069588c58e87ad673
---
# IDF

IDF算法，提供了DF MLlib API、IDF MLlib API、IDF MLlib RDD-based API三套接口。

| 模型接口类别 | 函数接口 |
| --- | --- |
| DF MLlib API | def compute(sc: SparkContext, params: DFParams): RDD[String] |
| IDF MLlib API | def fit(dataset: Dataset[\_]): IDFModel |
| IDF MLlib API | def fit(dataset: Dataset[\_], paramMaps: Array[ParamMap]): Seq[IDFModel] |
| IDF MLlib API | def fit(dataset: Dataset[\_], paramMap: ParamMap): IDFModel |
| IDF MLlib API | def fit(dataset: Dataset[\_], firstParamPair: ParamPair[\_], otherParamPairs: ParamPair[\_]\*): IDFModel |
| IDF MLlib RDD\-based API | def fit(dataset: RDD[Vector]): IDFModel |
| IDF MLlib RDD\-based API | def fit(dataset: JavaRDD[Vector]): IDFModel |


#### DF MLlib API

- 功能描述
  传入文本数据的路径，设置算法参数，调用compute接口，返回结果。


- 输入输出

  1. 包名：package org.apache.spark.ml.feature
  2. 类名：DF
  3. 方法名：compute
  4. 输入：DFParams对象，参数描述如下表| 参数名称 | 取值类型 | 描述 |
| --- | --- | --- |
| dataPath | String，缺省值为空串 | 文本数据的路径 |
| splitMinSizeMB | Long，缺省值为1024 | map任务数据分片大小的下限值 |
| splitMaxSizeMB | Long，缺省值为2048 | map任务数据分片大小的上限值 |
| splitLocations | Long，缺省值为401 | map任务数据分片的最大位置数 |
| langFile | String，缺省值为“languages.csv” | 语种启用的配置文件名 |
| globalMerge | Boolean，缺省值为False | 是否开启DF值的全局合并 |
| outputSeparator | String，缺省值为“\t” | 输出结果中的分隔符 |


  5. 算法参数| 参数名称 | 取值类型 | 描述 |
| --- | --- | --- |
| sc | SparkContext对象 | Spark上下文环境 |
| params | DFParams对象 | 算法详细集合 |


    参数及fit代码接口示例： 1 2 3 4 5 6 import org.apache.spark.ml.feature.DFParams import org.apache.spark.ml.feature.DF ...... val params = new DFParams(dataPath, splitMinSizeMB, splitMaxSizeMB, splitLocations, langFile, globalMerge) val res = DF.compute(sc, params) res.collect().foreach(println)

  6. 输出：RDD[String]，包含全部词语的文档频率

- 使用样例
  1 2 3 4 5 6 import org.apache.spark.ml.feature.DFParams import org.apache.spark.ml.feature.DF ...... val params = new DFParams(dataPath, splitMinSizeMB, splitMaxSizeMB, splitLocations, langFile, globalMerge) val res = DF.compute(sc, params) res.collect().foreach(println)

- 样例结果
  1 2 hello_en 1 world_en 2


#### IDF MLlib API

- 功能描述
  传入文本数据的路径，设置算法参数，调用compute接口，返回结果。


- 输入输出

  1. 包名：package org.apache.spark.ml.feature
  2. 类名：IDF
  3. 方法名：fit
  4. 输入：Dataset[_]，文档数据，必须字段如下| 参数名称 | 取值类型 | 描述 |
| --- | --- | --- |
| inputCol | Vector | TF词频数据的字段名 |


  5. 基于原生算法优化的参数
    def setInputCol(value: String): IDF.this.type

    def setMinDocFreq(value: Int): IDF.this.type

    def setOutputCol(value: String): IDF.this.type

  6. 新增算法参数| 参数名称 | 取值类型 | 描述 | spark conf参数名 |
| --- | --- | --- | --- |
| combineStrategy | String，取值范围：default或auto，缺省值为auto。 | 数据聚合策略 | spark.boostkit.ml.idf.combineStrategy |
| fetchMethod | String，取值范围：collect或reduce或fold，缺省值为collect。 | 结果获取方法 | spark.boostkit.ml.idf.fetchMethod |


    参数及fit代码接口示例： 1 2 3 4 5 6 7 8 9 import org.apache.spark.ml.Pipeline import org.apache.spark.ml.evaluation.RegressionEvaluator import org.apache.spark.ml.feature.VectorIndexer import org.apache.spark.ml.regression.DecisionTreeRegressionModel import org.apache.spark.ml.regression.DecisionTreeRegressor val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features") val idfModel = idf.fit(featurizedData) val rescaledData = idfModel.transform(featurizedData) rescaledData.select("label", "features").show()

  7. 输出：IDFModel，IDF模型，模型推理时的输出字段如下| 参数名称 | 取值类型 | 描述 |
| --- | --- | --- |
| outputCol | Vector | IDF与TF相乘得到TF\-IDF值的字段名 |


- 使用样例
  1 2 3 4 5 6 7 8 9 import org.apache.spark.ml.Pipeline import org.apache.spark.ml.evaluation.RegressionEvaluator import org.apache.spark.ml.feature.VectorIndexer import org.apache.spark.ml.regression.DecisionTreeRegressionModel import org.apache.spark.ml.regression.DecisionTreeRegressor val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features") val idfModel = idf.fit(featurizedData) val rescaledData = idfModel.transform(featurizedData) rescaledData.select("label", "features").show()

- 样例结果
  1 2 3 4 5 +----------+-----+--------------------+ |label | features | +----------+-----+--------------------+ | 1|(1000,[0,1,2,3,4,...| +----------+-----+--------------------+


#### IDF MLlib RDD-based API

- 功能描述
  传入RDD格式的文本数据，调用训练接口，输出IDF模型。


- 输入输出

  1. 包名：package org.apache.spark.mllib.feature
  2. 类名：IDF
  3. 方法名：fit
  4. 输入：RDD[Vector]，训练文本数据。
  5. 基于原生算法优化的参数
    minDocFreq，词语必须出现的最小文档数量。

  6. 新增算法参数| 参数名称 | 取值类型 | 描述 | spark conf参数名 |
| --- | --- | --- | --- |
| combineStrategy | String，取值范围：default或auto，缺省值为auto | 数据聚合策略 | spark.boostkit.ml.idf.combineStrategy |
| fetchMethod | String，取值范围：collect或reduce或fold，缺省值为collect | 结果获取方法 | spark.boostkit.ml.idf.fetchMethod |


    参数及fit代码接口示例： 1 2 3 4 5 val idf = new IDF().fit(tf) val tfidf: RDD[Vector] = idf.transform(tf) val idfIgnore = new IDF(minDocFreq = 2).fit(tf) val tfidfIgnore: RDD[Vector] = idfIgnore.transform(tf) println(tfidfIgnore.first)

  7. 输出：RDD[String]，包含全部词语的文档频率

- 使用样例
  1 2 3 4 5 val idf = new IDF().fit(tf) val tfidf: RDD[Vector] = idf.transform(tf) val idfIgnore = new IDF(minDocFreq = 2).fit(tf) val tfidfIgnore: RDD[Vector] = idfIgnore.transform(tf) println(tfidfIgnore.first)

- 样例结果
  1 (1000,[0,1,2,3,4,...
