我正在尝试使用spark mllib lda来总结我的文档语料库.
我的问题设置如下.
我有16台服务器(每台有20个内核和128GB内存).
当我执行LDA OnlineLDAOptimizer,它给了内存不足的错误,提示我增加spark.driver.maxResultSize类似
的11个任务(1302 MB)序列化结果总大小比spark.driver.maxResultSize大
我增加到spark.driver.maxResultSize120GB(也spark.driver.memory增加到120GB)并重新运行LDA但不缺.它仍然说11个任务(120.1 GB)的序列化结果的总大小比spark.driver.maxResultSize大
我尝试了另外一个包含大约100,000个独特单词的数据集,并且它有效
那么,在使用Spark mllib LDA时,如何估计内存使用量?我在官方文档中找不到任何规范.
注意我使用稀疏向量来构造RDD[(Long, Vector)]传递给docuemnt ,LDA.run()但不知道spark lda是否可以在内部正确处理稀疏格式.
(编辑)我使用Scala版本的LDA.不是Python版本.
这可能是一个相关的问题,但没有给出明确的答案. Spark LDA困境 - 预测和OOM问题
(编辑)的
这是我的代码片段(要点). https://gist.github.com/lucidfrontier45/11420721c0078c5b7415
def startJob(args: RunArgs)(implicit sc: SparkContext): Unit = {
val src = sc.textFile(args.fname, minPartitions = args.n_partitions).map(_.split("\t"))
.flatMap {
// input file's format is (user_id, product_name, count)
case Array(u, p, r, t) => Some((u.toInt, p.toInt, r.toDouble))
case _ => …Run Code Online (Sandbox Code Playgroud) 在 Rust 中,我有一个HashMap密钥是(String, String). 现在我有(&str, &str)数据了。有什么方法可以将其用作查询而不使用Strings 吗?