我有 2 个文本文件存储在 Hadoop 中,我想用它们在 Apache Spark GraphX 中创建一个图形:
- 具有顶点信息的文本文件,包括标识每个顶点的 GUID 类型字符串。
- 带有边缘信息的文本文件,包括两个 GUID 类型的字符串,用于链接源顶点和目标顶点 GUID。
我将这些表文件导入到 HCatalog 表中,这样我就可以使用 HiveContext 从 Spark 访问这些文件。
我的理解是:
- 在 GraphX 中,VertexID 是 Long 类型。
- 在 Apache Spark GraphX 开发者社区中发布了使用字符串作为 VertexIds 的功能请求: https ://issues.apache.org/jira/browse/SPARK-3799
为了继续我的项目,我想根据 GUID 信息,用 Long 类型的附加列扩展我的 2 个表,以便在 GraphX 中实现 VertexID。Pig 不提供诸如 Java 中的 UUID.getMostSignificantBits() 之类的函数来将 UUID/GUID 转换为 Long 类型。
Piggybank UDF 在“评估”部分包含函数 HashFNV 的实现。虽然我不是 Java 开发人员,但我从 Java 源代码中了解到,该函数转换 String 类型的输入并返回 Long 类型的哈希。它还将输入表扩展为具有 DataType.LONG 列的新表。
问题:
- 将 Pig 与执行 HashFNV 函数的 Piggybank jar 一起使用是一种实用且实用的方法,可以从具有 GUID 信息的输入表/文件生成 Long 类型的 VertexIds?
- 注册 Piggybank jar 后,如何在 Pig 中调用和使用 HasFNV 函数?你能提供示例代码吗?
假设:
- 唯一的 GUID 将使用 HashFNV 生成 Long 类型的唯一哈希。
- 我确实理解代表 128 位的 GUID 不适合 64 位的 Long。但是,输入文件中的 GUID 数量不会超过 64 位空间。