You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark字典转RDD方法及Spark 1.6.0下Word2Vec使用疑问

嘿,我看你正在用Spark 1.6.0版本的Word2Vec处理数据,先帮你确认下你的示例代码(顺便修正了import的小问题),再给你讲讲怎么把字典转成RDD~

一、Word2Vec 实践代码与结果

你参考官方文档写的代码逻辑没问题,这里修正了import语句的小疏漏,完整可运行代码如下:

from pyspark.mllib.feature import Word2Vec

sentence = "a b " * 100 + "a c " * 10
localDoc = [sentence, sentence]
doc = sc.parallelize(localDoc).map(lambda line: line.split(" "))
model = Word2Vec().setVectorSize(10).setSeed(42).fit(doc)

运行后得到的向量输出示例如下:

>>> model.getVectors()
{'a': [0.26699373, -0.26908076, 0.0579859, -0.080141746, 0....
二、PySpark 中将字典转换为 RDD 的方法

针对你提到的字典转RDD需求,其实Spark的sc.parallelize()方法可以直接处理字典的可迭代对象,分几种常见场景:

1. 转换为键值对RDD(最常用)

如果你的字典是像model.getVectors()返回的单词-向量键值对结构,直接用字典的items()方法获取所有(key, value)元组,再并行化:

# 先拿到你的字典对象
word_vectors_dict = model.getVectors()
# 转换为键值对RDD,每个元素是(单词, 向量)元组
word_vectors_rdd = sc.parallelize(word_vectors_dict.items())

这样得到的RDD可以直接用Spark的键值对算子(比如mapValues、reduceByKey)做后续处理。

2. 单独提取键或值的RDD

如果只需要字典里的键(比如所有单词)或者值(比如所有向量),可以分别用keys()和values()方法:

# 提取所有单词的RDD
words_rdd = sc.parallelize(word_vectors_dict.keys())
# 提取所有向量的RDD
vectors_rdd = sc.parallelize(word_vectors_dict.values())

需要注意的是,在Spark 1.6.0版本中,这些操作都是完全支持的,因为parallelize()可以接收任何Python可迭代对象,而字典的items()、keys()、values()都属于可迭代对象范畴。

内容的提问来源于stack exchange,提问作者Zhangrong.Huang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:07:16