PySpark向字典广播值

时间:2015-07-02 00:57:51

标签: python dictionary apache-spark pyspark

使用如下内容的PySpark广播值:

  

[('b000jz4hqo',{'rom':2.4051362683438153,'clickart':   56.65432098765432,'950':254.94444444444443,'image':3.6948470209339774,'premier':9.27070707070707,'000':6.218157181571815,'dvd':1.287598204264871,'broderbund':22.169082125603865,'pack':2.98180636777128}),('b0006zf55o' ,{'laptops':11.588383838383837,'desktops':12.74722222222222,   'backup':2.8015873015873014,'win':0.501859142607174,'ca':   9.10515873015873,'v11':50.98888888888888,'30u':84.98148148148148,'30pk':254.94444444444443,'desktop':2.23635477582846,'1':   0.3231235037318687,'arcserve':24.28042328042328,'computer':0.6965695203400122,'lap':127.47222222222221,'oem':46.35353535353535,'international':9.44238683127572,'associates':7.284126984126985})]

因此它是一个key->列表广播变量。

尝试将broadcast.value转换为字典会导致

  

TypeError:不可用类型:'dict'

使用

之类的代码
from itertools import izip
amazonWeightsBroadcast = sc.broadcast(amazonWeightsRDD.collect())
i = iter(amazonWeightsBroadcast.value)
amazonWeightsDict = dict(izip(i, i))

也尝试过(给出相同的“不可修改的”错误):

amazonWeightsDict = dict(amazonWeightsBroadcast.value[i:i+2] for i in range(0, len(amazonWeightsBroadcast.value), 2))

因此,如果无法将广播变量转换为字典,那么通过密钥查找值列表的更好的解决方案是什么?

Python 2.7.6 Spark 1.3.1

1 个答案:

答案 0 :(得分:0)

我花了一段时间..问题在于如何创建广播变量。 不得不使用.collectAsMap()而不仅仅是.collect() 现在它按预期工作了。