我有两个存储在Hadoop中的文本文件,我想用它们在Apache Spark GraphX中创建一个Graph:
我将这些表文件导入HCatalog表,以便我可以使用HiveContext从Spark访问这些文件。
我的理解是:
为了继续我的项目,我想基于GUID信息扩展我的2个表,其中包含Long类型的附加列,以便在GraphX中实现VertexID。 Pig不像Java那样提供诸如UUID.getMostSignificantBits()之类的函数来将UUID / GUID转换为Long类型。
Piggybank UDF包括"评估" section一个函数HashFNV的实现。 虽然我不是java开发人员,但我从java源代码中理解该函数转换String类型的输入并返回Long类型的哈希。它还将输入表扩展为具有DataType.LONG列的新表。
问题:
假设:
答案 0 :(得分: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类型的附加字段。
除了GUID字段之外,还提到了名称和标签字段,以指示具有名称和标签属性的Vertex类型表。他们在答案中没有任何作用。
看起来我找到了一个从String类型GUID生成VertexIds类型Long的解决方案。我注意到其他想要使用他们自己的数据试验Apache Spark GraphX的人会遇到同样的问题。
如果要复制解决方案:请注意与128位GUID相比,64位类型Long的有限地址空间。