gpt4 book ai didi

java - 使用Pig通过Java运行字符串

转载 作者:行者123 更新时间:2023-12-02 07:33:06 28 4
gpt4 key购买 nike

我有一个UDF jar,它通过Pig输入一个String作为输入。通过运行“硬编码”字符串(例如此命令),此java文件可以正常工作

B = foreach f generate URL_UDF.mathUDF('stack.overflow');

会给我我期望的输出

我的问题是我正在尝试从文本文件中获取信息,并使用我的UDF。我加载了一个文件,并希望在该文件中传递已加载到UDF的数据。
LoadData = load 'data.csv' using PigStorage(',');
f = foreach LoadData generate $0 as col0, $1 as chararray

$ 1是我需要的列,并且研究使用char数组的数据类型( http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html#Data+Types)。

然后我尝试使用以下命令
B = foreach f生成URL_UDF.mathUDF($ 1);

将数据传递到无法说明的jar中
java.lang.ClassCastException: org.apache.pig.data.DataByteArray cannot be cast to java.lang.String

如果有人对此有任何解决方案,那就太好了。

我正在运行的Java代码如下
package URL_UDF;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.pig.FilterFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.EvalFunc;
import org.apache.pig.PigWarning;
import org.apache.pig.data.Tuple;
import org.apache.commons.logging.Log;
import org.apache.*;

public class mathUDF extends EvalFunc<String> {

public String exec(Tuple arg0) throws IOException {
// TODO Auto-generated method stub
try{

String urlToCheck = (String) arg0.get(0);

return urlToCheck;
}catch (Exception e) {
// Throwing an exception will cause the task to fail.
throw new IOException("Something bad happened!", e);
}
}

}

谢谢

最佳答案

您可以使用LOAD指定架构,如下所示

LoadData = load 'data.csv' using PigStorage(',') AS (col0: chararray, col1:chararray);

并将 col1传递给UDF。

要么
B = foreach LoadData generate (chararray)$1 AS col1:chararray;

实际上,这是Pig中的错误( PIG-2315),它将在0.12.1中修复。 foreach中的AS子句无法正常工作。

关于java - 使用Pig通过Java运行字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19704921/

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