我是一个新的Spark用户,我用Python编写代码。我创建了一对RDD,然后收集并广播它。有什么方法像python中的dict.get()
我可以用来通过键获取Broadcast对象的值,并在键不存在时设置默认值。
我收到了报告AttributeError: 'Broadcast' object has no attribute 'get'
答案 0 :(得分:2)
广播变量是广播值的包装,可以通过调用value
方法访问其值。下面的代码显示了这一点:
>>> broadcastVar = sc.broadcast([1, 2, 3])
<pyspark.broadcast.Broadcast object at 0x102789f10>
>>> broadcastVar.value
[1, 2, 3]
>>> broadcastVar.value[1]
2
在我们的案例中,我们播放了一个列表,但您也可以播放字典:
>>> dict = {"a":1}
>>> sc.broadcast(dict).value
{'a': 1}
如前所述,value方法将返回底层对象,在这种情况下,它是一个字典,因此您只需要访问它。所以这就是你要找的东西:
>>> print(sc.broadcast(dict).value.get("b", None))
None
>>> print(sc.broadcast(dict).value.get("a", None))
1
我已在此处返回None
,但您也可以返回任何内容:
>>> print(sc.broadcast(dict).value.get("v", -1))
-1
查看官方文档here。