Apache Spark GraphX でグラフを作成するために使用する 2 つのテキスト ファイルを Hadoop に保存しています。
- 各頂点を識別する GUID タイプの文字列を含む、頂点情報を含むテキスト ファイル。
- ソースと宛先の Vertex GUID をリンクする 2 つの GUID タイプ String を含むエッジ情報を含むテキスト ファイル。
これらのテーブル ファイルを HCatalog テーブルにインポートして、HiveContext を使用して Spark からこれらのファイルにアクセスできるようにします。
私の理解は次のとおりです。
- GraphX では、VertexID は Long 型です。
- Strings を VertexIds として使用する機能リクエストが Apache Spark GraphX 開発者コミュニティで発行されています: https://issues.apache.org/jira/browse/SPARK-3799
プロジェクトを進めるために、GraphX で VertexID を実装するために、Long 型の GUID 情報に基づいて、2 つのテーブルを追加の列で拡張したいと考えています。Pig は、UUID/GUID を Long 型に変換する Java のような UUID.getMostSignificantBits() などの関数を提供しません。
Piggybank UDF には、「評価」セクションに関数 HashFNV の実装が含まれています。私は Java 開発者ではありませんが、関数が String 型の入力を変換し、Long 型のハッシュを返すことを Java ソース コードから理解しています。また、DataType.LONG の列を持つ新しいテーブルに入力テーブルを拡張します。
質問:
- HashFNV 関数を実行する Piggybank jar で Pig を使用して、GUID 情報を含む入力テーブル/ファイルから Long 型の VertexIds を生成するための実用的で実用的な方法はありますか?
- Piggybank jar を登録した後、Pig 内で HasFNV 関数を呼び出して使用するにはどうすればよいですか? サンプルコードを提供できますか?
仮定:
- 一意の GUID は、HashFNV を使用して Long 型の一意のハッシュになります。
- 128 ビットを表す GUID が 64 ビットの Long に収まらないことは理解しています。ただし、入力ファイル内の GUID の量が 64 ビット空間を超えることはありません。