私は Spark と HBase (HappyBase ライブラリを使用) を使用していますが、小さなデータセットを使用する場合はすべて問題ありません。ただし、大規模なデータセットを操作する場合、map 関数を何度も呼び出すと、HBase Thrift への接続が失われます。現在、単一の疑似ノードで作業しています。
具体的には map 関数で以下のエラーが発生します。
TTransportException: Could not connect to localhost:9090
マップ機能:
def save_triples(triple, ac, table_name, ac_vertex_id, graph_table_name):
connection = happybase.Connection(HBASE_SERVER_IP, compat='0.94')
table = connection.table(table_name)
[...]
connection.close()
これは map 関数の呼び出しです:
counts = lines.map(lambda x: save_triples(x, ac, table_name, ac_vertex_id, graph_table_name))
output = counts.collect()
多くの接続が開かれているために発生していると思われます。メイン関数で「接続」オブジェクトを作成し、それをパラメーターとして map 関数に渡そうとしました (このようなものは Java の HBase ライブラリで機能します) が、次のエラーが発生します:
pickle.PicklingError: Can't pickle builtin <type 'method_descriptor'>
どんな助けでも大歓迎です。