【发布时间】:2013-10-31 11:11:59
【问题描述】:
我有一个 UDF jar,它通过 Pig 将字符串作为输入。这个java文件通过pig很好地运行一个'硬编码'字符串,比如这个命令
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 是我需要的列,研究数据类型 (http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html#Data+Types) 使用 char 数组。
然后我尝试使用以下命令 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);
}
}
}
谢谢
【问题讨论】:
标签: java apache-pig