PythonでのHadoopストリーミングジョブでメモリの問題で困っています。プログラムでは、次のような構造体が必要です。
dict{"metric_id":set(user_id1,user_id2...),...}
reduce (reducer のみ) では、metric_id ごとに何人のユーザーがいるかを計算します。現在、約 1 億人のユーザーがおり、約 6G のメモリを消費します。
モジュールshelveを試してみましたが、非常に遅いです...間違った方法で使用した可能性があります:
tmp_set = set()
for id in value.split(","):
if id != "":
tmp_set.add(id)
if self.ids_dict.has_key(metric_id):
ori_set = self.ids_dict[metric_id]
self.ids_dict[metric_id] = ori_set.union(tmp_set)
else:
self.ids_dict[metric_id] = tmp_set