scala - 在火花中设置 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 文档和以下链接,但没有帮助我。
解决方案
您的语料库包含少于 100000 个术语。通常,您的文档包含 - 根据文档的大小 - 数百万个术语。然后,该算法将该空间限制为您vocabSize
消除高度唯一的值。
为此,您需要减少vocabSize <= total number terms in your corpus = 4
.
推荐阅读
- qliksense - 如何在 Qlik Sense 中默认显示最近一周的交易量
- javascript - 如何在 javscript/node 中导入对象
- python - Python 如何处理子包?
- vba - 选择单元格时创建文件夹和子文件夹
- vue.js - 你如何在 firebase 服务工作者和 Vue/Vuex 网络应用程序之间进行通信
- xamarin - 如何在 Xamarin.iOS 中使用 Google 的人员 API?
- python - 为什么“5 in range(5,6) in [range(5,6)]”返回True?
- java - java rest 调用获取 url net::ERR_FAILED
- php - 在 PHP 中删除和创建 MySQL 视图不起作用
- python - 如何在while循环中做elif