. MLlib, Python - Scala, JVM. Py4J (. Java/Scala ?), Java/ Scala .
MLlib , RDD, . Word2VecModel getVectors, , , , JavaMap, . - :
from pyspark.mllib.linalg import DenseVector
vectors_ = model.getVectors()
vectors = {k: DenseVector([x for x in vectors_.get(k)])
for k in vectors_.keys()}
Python, . , Python, Py4J, . DataFrame:
lookup = sqlContext.read.parquet("path_to_word2vec_model/data").alias("lookup")
:
lookup.printSchema()
## root
## |-- word: string (nullable = true)
## |-- vector: array (nullable = true)
## | |-- element: float (containsNull = true)
, , join:
from pyspark.sql.functions import col
words = sc.parallelize([('hello', ), ('test', )]).toDF(["word"]).alias("words")
words.join(lookup, col("words.word") == col("lookup.word"))
## +-----+-----+--------------------+
## | word| word| vector|
## +-----+-----+--------------------+
## |hello|hello|[-0.030862354, -0...|
## | test| test|[-0.13154022, 0.2...|
## +-----+-----+--------------------+
/, :
lookup_bd = sc.broadcast(lookup.rdd.collectAsMap())
rdd = sc.parallelize([['Hello'],['test']])
rdd.map(lambda ws: [lookup_bd.value.get(w) for w in ws])