Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark-广播HashMap并在转换中使用它_Apache Spark - Fatal编程技术网

Apache spark Spark-广播HashMap并在转换中使用它

Apache spark Spark-广播HashMap并在转换中使用它,apache-spark,Apache Spark,目前在转换中,我正在读取一个文件并创建一个HashMap,它是一个静态字段,用于重用 对于我需要对照HashMap检查的每个记录,是否包含相应的键。如果它与记录键匹配,则从HashMap获取值 最好的方法是什么 我应该广播这个HashMap并在转换中使用它吗?[HashMap或ConcurrentHashMap] DoesBroadcast将确保HashMap始终包含该值 有没有像HashMap变为空这样的场景,我们也需要处理该检查?[如果是空的,请再次加载] 更新: 基本上,我需要使用Hash

目前在转换中,我正在读取一个文件并创建一个HashMap,它是一个静态字段,用于重用

对于我需要对照HashMap检查的每个记录,是否包含相应的键。如果它与记录键匹配,则从HashMap获取值

最好的方法是什么

我应该广播这个HashMap并在转换中使用它吗?[
HashMap
ConcurrentHashMap
]

Does
Broadcast
将确保
HashMap
始终包含该值

有没有像HashMap变为空这样的场景,我们也需要处理该检查?[如果是空的,请再次加载]

更新:

基本上,我需要使用HashMap作为转换内部的查找。最好的方法是什么?广播还是静态变量


当我对少数记录使用静态变量时,我没有从HashMap中获得正确的值。HashMap只包含100个元素。但我将其与2500万条记录进行比较。

首先,一个
广播
变量只能用于读取目的,而不能作为一个
全局
变量,该变量可以在经典编程(一个线程、一台计算机、过程编程等)中修改。事实上,您可以在代码中使用全局变量,并且可以在其中的任何部分使用它(甚至在
映射
)中),但决不能修改

正如您在这里看到的,它们提高了性能,因为在所有节点中都有数据的缓存副本,这样可以避免将相同的
对象反复传输到每个节点

广播变量允许程序员保留只读变量 缓存在每台计算机上,而不是随任务一起发送副本

比如说

rdd=sc.parallelize(范围(1000))
广播=sc.broadcast({“数字”:1,“值”:4})
rdd=rdd.map(λx:x+broadcast.value[“value”])
rdd.collect()

正如您所见,在每次转换迭代中,我都会访问字典中的值。

您应该广播变量。
使变量为静态将导致类被序列化和分发,而您可能不希望这样

当我在转换中调用Broadcast.value时,它会返回相同的HashMap还是为每一行创建新的HashMap?我已经用我正在查看的内容更新了我的问题。请检查它。“当前在转换中,我正在读取一个文件并创建HashMap,它是一个静态字段,用于重复使用”。那么,你是说你正试图为每个转换创建一个广播变量?!警察局。我建议您发布一个小的代码示例,这样我可以更好地理解您的问题,实际上它有点模糊。