首页 > 解决方案 > 在火花中设置 CountVectorizerModel 的 minDF 和词汇大小?

问题描述

我正在使用 CountVectorizerModel 和 MinHashLSH 库编写 Spark Scala 代码,用于在数据场中的两组字符串中查找 Jaccard 相似性。在将其提供给 MinHashLSH 之前,应将其转换为向量。为此,我正在使用 CountVectorizerModel。

问题是我随机设置了 setVocabSize() 和 setMinDF() 之类的值,如下代码所示。我收到一个错误vocabulary size should be > 0. Lower minDF as necessary spark error

数据帧 dfB 的片段如下所示,其大小根据输入而变化。

 +------------+-----------------+
|         id1|          values1|
+------------+-----------------+
|         USA|  [Stat]|
|     Germany|[Country]|
| Clever_Hans|  [Horse]|
|       China|[Country]|
|       Japan|[Country]|
|     Halidae| [Family]|
|Real_Delight|  [Horse]|
|Bago_(horse)|  [Horse]|

val dfB = hashtoseq1.toDF("id1", "values1")

val cvModel1: CountVectorizerModel = new CountVectorizer()
  .setInputCol("values1")
  .setOutputCol("features1")
  .setVocabSize(100000)
  .setMinDF(1)
  .fit(dfB)

val kt1 = cvModel1.transform(dfB)
//  kt.show
val mh1 = new MinHashLSH()
  .setNumHashTables(5)
  .setInputCol("features1")
  .setOutputCol("hashes1")

val model1 = mh1.fit(kt1)

val dffilter1 = model1.approxSimilarityJoin(kt1, kt1, 0.4)

上面的行代码适用于小于 4GB 的文件。对于 17 GB 的文件,它会引发错误。我浏览了 spark 文档和以下链接,但没有帮助我。

Spark MLib Word2Vec 错误:词汇量应该 > 0

标签: scalaapache-spark

解决方案


您的语料库包含少于 100000 个术语。通常,您的文档包含 - 根据文档的大小 - 数百万个术语。然后,该算法将该空间限制为您vocabSize消除高度唯一的值。

为此,您需要减少vocabSize <= total number terms in your corpus = 4.


推荐阅读