为了账号安全,请及时绑定邮箱和手机立即绑定

创建一个单词长度为key的字典,并在spark中将单词排序为值?

创建一个单词长度为key的字典,并在spark中将单词排序为值?

UYOU 2021-04-11 17:19:59
我是新手,我正尝试创建一个字典,如下所示:{4: {'aenr': ['earn', 'rane'], 'aerr': ['rare', 'rear'], 'aenw': ['anew', 'wane', 'wean'], 'derw': ['drew']}本质上这应该是使用spark的结构{len(word): {sorted(word):[word1,word2,etc]}我有一个很大的文件,其中包含英语单词,其结构如下所示:{  "biennials": 0,   "tripolitan": 0,   "oblocutor": 0,   "leucosyenite": 0,   "chilitis": 0,   "fabianist": 0,   "diazeutic": 0,   "alible": 0,   "deciet":0}所以我想逐行读取文件并创建一个rdd可以保存此内容:{len(word): {sorted(word):[word1,word2,etc]}我已经试过了:    r = rdd.map(lambda x: {len(x):sorted(x)})    items = r.flatMap(lambda line: (line.items()))    items.take(items.count())    groupedItems = items.groupByKey().mapValues(list)    groupedItems.take(groupedItems.count())#j = filter2_rdd    d = groupedItems.collectAsMap()但这会打印以下内容:[{1: {u'{': [u'{']}},{9: {u'abeiilnns': [u'  "biennials": 0, ']}}, {10: {u'aiilnoprtt': [u'  "tripolitan": 0, ']}}, {9: {u'bclooortu': [u'  "oblocutor": 0, ']}}, {12: {u'ceeeilnostuy': [u'  "leucosyenite": 0, ']}}, {8: {u'chiiilst': [u'  "chilitis": 0, ']}}, {9: {u'aabfiinst': [u'  "fabianist": 0, ']}}, {9: {u'acdeiituz': [u'  "diazeutic": 0, ']}}, {6: {u'abeill': [u'  "alible": 0, ']}}, {6: {u'cdeeit': [u'  "deciet":0,']}}, {5: {u'doosw': [u'  "woods": 4601, ']}}, {14: {u'adeejmnnoprrtu': [u'  "preadjournment": 0, ']}}, {7: {u'deiprss': [u'  "spiders": 0, ']}}, {9: {u'aabfiimns': [u'  "fabianism": 0, ']}}, {11: {u'cdgilnoostu': [u'  "outscolding": 0, ']}}, {10: {u'eeilprrsty': [u'  "sperrylite": 0, ']}}, {8: {u'agilnrtw': [u'  "trawling": 0, ']}}, {13: {u'acdeimmoprrsu': [u'  "cardiospermum": 0, ']}}, {10: {u'gghhiilttt': [u'  "lighttight": 0, ']}}, {7: {u'deiprsy': [u'  "spidery": 0, ']}}}我需要将它们按长度和列表中的所有单词分组
查看完整描述

1 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

您不能立即这样map()len()sorted()因为您失去了最初的价值。这是一种实现方法:

  • map 创建密钥 sorted(x)

  • groupByKey -- sorted(x)

  • map 创建密钥 len(x)

  • groupByKey -- len(x)

  • collectAsMap()

ResultIterable如果要打印出来,可能需要将s转换为特定的python类型:

例如(假设您已将所有单词并行化为rdd):

In []:

(rdd

 .map(lambda x: (''.join(sorted(x)), x))

 .groupByKey()

 .mapValues(lambda x: list(x))

 .map(lambda x: (len(x[0]), x))

 .groupByKey()

 .mapValues(lambda x: dict(x))

 .collectAsMap())


Out[]:

{6: {'abeill': ['alible'], 'cdeeit': ['deciet']},

 8: {'chiiilst': ['chilitis']},

 9: {'aabfiinst': ['fabianist'],

  'abeiilnns': ['biennials'],

  'acdeiituz': ['diazeutic'],

  'bclooortu': ['oblocutor']},

 10: {'aiilnoprtt': ['tripolitan']},

 12: {'ceeeilnostuy': ['leucosyenite']}}


查看完整回答
反对 回复 2021-04-20
  • 1 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信