有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

ApachePig使用pig在Java中运行字符串

我有一个UDF jar,它通过Pig接收字符串作为输入。这个java文件通过pig fine运行一个“硬编码”字符串,比如这个命令

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 generate URL_UDF。马图夫(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);
    }
}

}

谢谢


共 (1) 个答案

  1. # 1 楼答案

    可以按如下方式指定带有LOAD的模式

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

    并将col1传递给UDF

    或者

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

    实际上,这是Pig中的一个bug(PIG-2315),将在0.12.1中修复。foreach中的AS子句并不像人们期望的那样工作