1. 背景
最近在业务开发过程中,遇到如下需求:
一张Hive表中存储着item id和描述这个id的文本(已经切词,各个词语之间' '
分隔)。另外还有一份数据,其中存储了各个词语和该词语对应的embedding vector。现要计算每个id对应文本的词向量表示,即将同一个id对应的文本中所有词语embedding vector求和。
2. 问题描述
在计算embedding vector求和过程中,出现了OOM问题。
//代码1
val sql = s"select id, text from table where day = '2020-08-20'"
val wordToVectorMap: collection.Map[String, Array[Float]] = ... // 数据量大约2G
val EMBEDDING_SIZE = 300
val zeroVector = new Array[Float](EMBEDDING_SIZE)
val idToWordVector: DataFrame = hiveContext.sql(sql).rdd.map(x => {
val id = x.getString(0)
val wordList: Array[String] = x.getString