像Spark中的'dict.get'这样的方法

时间:2017-06-17 09:57:10

标签: python python-2.7 apache-spark pyspark

我是一个新的Spark用户,我用Python编写代码。我创建了一对RDD,然后收集并广播它。有什么方法像python中的dict.get()我可以用来通过键获取Broadcast对象的值,并在键不存在时设置默认值。 我收到了报告AttributeError: 'Broadcast' object has no attribute 'get'

1 个答案:

答案 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