0

Apache Spark GraphX でグラフを作成するために使用する 2 つのテキスト ファイルを Hadoop に保存しています。

  1. 各頂点を識別する GUID タイプの文字列を含む、頂点情報を含むテキスト ファイル。
  2. ソースと宛先の 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 の列を持つ新しいテーブルに入力テーブルを拡張します。

質問:

  1. HashFNV 関数を実行する Piggybank jar で Pig を使用して、GUID 情報を含む入力テーブル/ファイルから Long 型の VertexIds を生成するための実用的で実用的な方法はありますか?
  2. Piggybank jar を登録した後、Pig 内で HasFNV 関数を呼び出して使用するにはどうすればよいですか? サンプルコードを提供できますか?

仮定:

  • 一意の GUID は、HashFNV を使用して Long 型の一意のハッシュになります。
  • 128 ビットを表す GUID が 64 ビットの Long に収まらないことは理解しています。ただし、入力ファイル内の GUID の量が 64 ビット空間を超えることはありません。
4

1 に答える 1

0

答えは、次の Pig スクリプトです。

REGISTER piggybank.jar;
A = LOAD '/user/hue/guidfile.txt'
AS (guid:chararray, name:chararray, label:chararray);
B = FOREACH A GENERATE (guid, name, label, org.apache.pig.piggybank.evaluation.string.HashFNV(guid));
store B INTO '/user/hue/guidlongfile.txt';

結果には、Long 型の追加フィールドが含まれます。

name および label フィールドは、GUID フィールドに加えて name および label 属性を持つ Vertex タイプ テーブルを示すために言及されています。それらは答えには機能しません。

String 型の GUID から VertexIds 型の Long を生成するソリューションを見つけたようです。独自のデータを使用して Apache Spark GraphX を試したいと考えている他のユーザーも同じ問題に遭遇していることに気付きました。

ソリューションをコピーする場合: 128 ビット GUID と比較して、64 ビット タイプの Long のアドレス空間が限られていることに注意してください。

于 2015-02-03T23:04:48.363 に答える