gpt4 book ai didi

hadoop - 将矩阵发送给udf pig 拉丁

转载 作者:行者123 更新时间:2023-12-02 21:52:33 27 4
gpt4 key购买 nike

我对UDF pig 拉丁有问题。
我正在尝试实现一个系统,该系统必须验证本地存储的矩阵与hadoop存储库中存储的一组矩阵之间是否存在“映射”。
对于映射,我的意思是在hadoop中是否存在一个存储矩阵的行和列的排列,该排列将矩阵转换为等于本地存储的矩阵。
因为矩阵可以包含数百个元素,所以我正在考虑在hadoop上执行映射算法以使用并行性。
我一直在寻找UDF pig 拉丁语,但是我不明白如何将本地矩阵“发送”到UDF函数。

public class Mapping extends EvalFunc<String>
{
private int[][] matrixToMap; //The local matrix i want to map

public String exec(Tuple input) throws IOException { //Here the tuple are the matrix stored in hadoop
if (input == null || input.size() == 0)
return null;
try{
//HERE THE CODE FOR THE MAPPING
}

}
}

}

我的问题是考虑到我将使用以下代码,如何初始化属性matrixToMap:
REGISTER /Users/myudfs.jar;  
//SOME CODE TO INITIALIZE ATTRIBUTE matrixToMap
records = LOAD 'Sample7.txt' //the matrix stored in hadoop
B = FOREACH records GENERATE myudfs.mapping(records);

请考虑在Java程序中调用Pig脚本,并将本地矩阵存储在Java矩阵中。因此,java程序如下所示:
int [][] localMatrix;
pigServer.registerJar("/Users/myudfs.jar");
//Some code to make Mapping.matrixToMap = localMatrix
pigServer.registerQuery("records = LOAD 'Sample7.txt';");
pigServer.registerQuery("B = FOREACH records GENERATE myudfs.Mapping(formula);");

你有什么主意吗?
谢谢

最佳答案

您可以像在UDF的构造函数中那样初始化类变量:

public class Mapping extends EvalFunc<String>
{
private int[][] matrixToMap; //The local matrix i want to map

public Mapping(String filename) {
// Code to populate matrixToMap from the data in filename
}

public String exec(Tuple input) throws IOException { //Here the tuple are the matrix stored in hadoop
if (input == null || input.size() == 0)
return null;
try{
//HERE THE CODE FOR THE MAPPING
}

}
}

在脚本中,使用以下行:
DEFINE Mapping myudfs.Mapping('/path/to/matrix/on/HDFS');

使用此方法,您的矩阵必须存储在HDFS上,以便正在初始化并调用构造函数的映射器或化简器可以访问数据。

关于hadoop - 将矩阵发送给udf pig 拉丁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com