如何使用spark从word2vec模型获取数据框
How to get a dataframe from word2vec model using spark
我目前正在开发苏打水应用程序,我是 spark 和 h2o 的初学者。
我想做的事情:
- 正在加载输入文本文件
- 创建一个 word2vec 模型
- 创建一个包含一列 word 和一列 Vector
的数据框
- 使用数据帧作为 h2o 的输入
通过创建模型,我得到了一张地图,但我不知道如何创建它的数据框。输出应如下所示:
字数 | 向量
断言 | [0.3, 0.4.......]
感觉 | [0.6, 0.2.......]
等等。
到目前为止,这是我的代码:
from pyspark import SparkContext
from pyspark.mllib.feature import Word2Vec
from pysparkling import *
import h2o
from pyspark.sql import SQLContext
from pyspark.mllib.linalg import Vectors
from pyspark.sql import Row
# Starting h2o application on spark cluster
hc = H2OContext(sc).start()
# Loading input file
inp = sc.textFile("examples/custom/text8.txt").map(lambda row: row.split(" "))
# building the word2vec model with a vector size of 10
word2vec = Word2Vec()
model = word2vec.setVectorSize(10).fit(inp)
# Sanity check
model.findSynonyms("property",5)
# assign vector representation (map to variable
wordVectorsDF = model.getVectors()
# Transform wordVectorsDF word into dataframe
Spark 提供了哪些方法或功能?
提前致谢
首先在 H2O 中我们不支持 Vector
列类型,你必须制作这样的框架:
word | V1 | V2 | ...
assert | 0.3 | 0.4 | ...
sense | 0.6 | 0.2 | ...
现在是真正的问题 - 不,因为它是 Scala Map
,我们提供了从数据源(HDFS/S3 上的文件、数据库等)或从 [=23] 转换创建框架的方法=] 但不是来自 Java/Scala 个集合。写一个是可以的,但是很麻烦。
不是最高效的解决方案,但最简单的代码方式是首先制作一个 DF(或 RDD)(通过 运行 sc.parallelize
on map.toSeq
)然后转换它到 H2OFrame:
import hc._
val wordsDF = sc.parallelize(wordVectorsDF.toSeq).toDF
val h2oFrame = asH2OFrame(wordsDF)
我发现有两个用于 Word2Vec 转换的库 - 我不知道为什么。
from pyspark.mllib.feature import Word2Vec
from pyspark.ml.feature import Word2Vec
第二行 returns 一个具有函数 getVectors()
的数据框,并且具有与第一行不同的用于构建模型的参数。
也许有人可以就这两个不同的库发表评论。
提前致谢。
我目前正在开发苏打水应用程序,我是 spark 和 h2o 的初学者。
我想做的事情:
- 正在加载输入文本文件
- 创建一个 word2vec 模型
- 创建一个包含一列 word 和一列 Vector 的数据框
- 使用数据帧作为 h2o 的输入
通过创建模型,我得到了一张地图,但我不知道如何创建它的数据框。输出应如下所示:
字数 | 向量
断言 | [0.3, 0.4.......]
感觉 | [0.6, 0.2.......] 等等。
到目前为止,这是我的代码:
from pyspark import SparkContext
from pyspark.mllib.feature import Word2Vec
from pysparkling import *
import h2o
from pyspark.sql import SQLContext
from pyspark.mllib.linalg import Vectors
from pyspark.sql import Row
# Starting h2o application on spark cluster
hc = H2OContext(sc).start()
# Loading input file
inp = sc.textFile("examples/custom/text8.txt").map(lambda row: row.split(" "))
# building the word2vec model with a vector size of 10
word2vec = Word2Vec()
model = word2vec.setVectorSize(10).fit(inp)
# Sanity check
model.findSynonyms("property",5)
# assign vector representation (map to variable
wordVectorsDF = model.getVectors()
# Transform wordVectorsDF word into dataframe
Spark 提供了哪些方法或功能?
提前致谢
首先在 H2O 中我们不支持 Vector
列类型,你必须制作这样的框架:
word | V1 | V2 | ...
assert | 0.3 | 0.4 | ...
sense | 0.6 | 0.2 | ...
现在是真正的问题 - 不,因为它是 Scala Map
,我们提供了从数据源(HDFS/S3 上的文件、数据库等)或从 [=23] 转换创建框架的方法=] 但不是来自 Java/Scala 个集合。写一个是可以的,但是很麻烦。
不是最高效的解决方案,但最简单的代码方式是首先制作一个 DF(或 RDD)(通过 运行 sc.parallelize
on map.toSeq
)然后转换它到 H2OFrame:
import hc._
val wordsDF = sc.parallelize(wordVectorsDF.toSeq).toDF
val h2oFrame = asH2OFrame(wordsDF)
我发现有两个用于 Word2Vec 转换的库 - 我不知道为什么。
from pyspark.mllib.feature import Word2Vec
from pyspark.ml.feature import Word2Vec
第二行 returns 一个具有函数 getVectors()
的数据框,并且具有与第一行不同的用于构建模型的参数。
也许有人可以就这两个不同的库发表评论。
提前致谢。