java - 如何从Pig Latin向用户定义的函数发送可变大小的输入

标签 java hadoop apache-pig user-defined-functions

我在Pig Latin / MapReduce中使用一个简单的UDF。 Pig拉丁查询为:

REGISTER \PigStringOperations.jar
sensitive = LOAD '/mdsba/sample2.csv' using PigStorage(',') as (AGE:int,EDU:chararray,SEX:chararray,SALARY:chararray);
BV= group  sensitive by (EDU,SEX) ; 
BVA= foreach BV generate sensitive.AGE as AGE;
anon = FOREACH BVA  GENERATE PigStringOperations.StringSplit(sensitive.AGE);
DUMP anon;

UDF是一个简单的Java程序
如下所示
public String exec(Tuple input) throws IOException
  String data = (String)input.get(0);
if (data.contains(" "))
{
  this.data2 = data.split(" ");
  return this.data2[0].toString();
}
return data;}}

这取自成人数据库Adult database sample
分组(EDU,SEX)的AGE输出从一个元组到另一个元组变化,如下所示
AGE(12,10,35,20)
AGE(4,56,10)
AGE(70)

每次运行程序时,都会收到以下错误:
ERROR 1066: Unable to open iterator for alias anon. Backend error : org.apache.pig.backend.executionengine.ExecException: ERROR 0: Scalar has more than one row in the output. 1st : (,EDU,SEX,SALARY), 2nd :(39,Bachelors,Male,<=50K)

最佳答案

分组数据后,敏感年龄将是一个袋子!计划UDF时请考虑这一点。
如果要对您的投影进行描述,例如:

DESCRIBE BVA;

这将帮助您了解数据结构并相应地计划处理。

关于java - 如何从Pig Latin向用户定义的函数发送可变大小的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37802655/

相关文章:

javascript - Jquery、ajax 和 JSON : Parsing GET response fails, 但只是有时?

java - JFormattedTextField 和 Integer 对象之间的比较

java - 准备好的语句和语句/查询缓存

hadoop - 如何通过Hadoop计算不同的集合

java - Pig Java UDF 问题

hadoop - 小数点后八位 pig

java - 如何在 Java 中从原始 byte[] 创建 BMP 文件

Hadoop Web 用户界面安全

bash - 在 shell 脚本中解析文本文件

hadoop - 如何限制 Pig 脚本启动的并发作业数量?