在 Pig 中使用 Piggybank HashFNV 将 GUID 类型 String 转换为 VertexIDs 类型 Long

Conversion of GUID type String to VertexIDs type Long using Piggybank HashFNV in Pig

我在 Hadoop 中存储了 2 个文本文件,我想用它们在 Apache Spark GraphX 中创建图形:

  1. 一个包含顶点信息的文本文件,包括一个 GUID 类型的字符串 识别每个顶点。
  2. 一个包含边缘信息的文本文件,包括两个 GUID 类型字符串,链接源和目标顶点 GUID。

我将这些 tables 文件导入 HCatalog tables,这样我就可以使用 HiveContext 从 Spark 访问这些文件。

我的理解是:

为了继续我的项目,我想根据 GUID 信息,使用 Long 类型的附加列扩展我的 2 table,以便在 GraphX 中实现 VertexID。 Pig 不提供 UUID.getMostSignificantBits() 之类的函数,如 Java 中那样将 UUID/GUID 转换为 Long 类型。

Piggybank UDF 在 "evaluation" 部分包含函数 HashFNV 的实现。 虽然我不是 java 开发人员,但我从 java 源代码了解到该函数转换 String 类型的输入和 returns Long 类型的散列。它还将输入 table 扩展为一个新的 table,其列为 DataType.LONG.

问题:

  1. 正在使用 Pig 和 Piggybank jar 执行 HashFNV 函数 从中生成 Long 类型的 VertexIds 的可用且实用的方法 带有 GUID 信息的输入 table/file?
  2. 注册Piggybank jar后如何在Pig中调用和使用HasFNV函数?你能提供示例代码吗?

假设:

答案是以下 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 类型的附加字段。

除了 GUID 字段外,还提到名称和标签字段以指示具有名称和标签属性的顶点类型 table。它们在答案中没有任何作用。

看来我找到了从字符串类型 GUID 生成 VertexIds 类型 Long 的解决方案。我注意到其他想要使用自己的数据试验 Apache Spark GraphX 的人遇到了同样的问题。

如果您想复制解决方案:请注意与 128 位 GUID 相比,64 位类型 Long 的有限地址 space。