【问题标题】:ERROR 1070 Apache Pig, using built-in UDF错误 1070 Apache Pig,使用内置 UDF
【发布时间】:2016-01-30 05:25:46
【问题描述】:

Thisthisthis,没有解决我的问题。他们都在制作自己的UDF。我想使用内置的 UDF。 任何 内置 UDF。对于我尝试过的每个 UDF,我都会收到相同或类似的错误。

 FOO = LOAD 'filepath/data.csv' 
 USING PigStorage(',') 
 AS (name:string, age:int, kilograms:double);

 BAR = FOREACH FOO GENERATE $0, $1, $2, kilograms*2.2 AS pounds;

这按预期工作,基本上创建与 FOO 相同的关系,但有一个额外的列,将 KG 转换为 LBS。

但是,如果我想使用诸如获取公斤的对数刻度之类的东西,如下所示:

 BAR2 = FOREACH FOO GENERATE $0, $1, $2, log(kilograms) AS logscaleKG;

我收到以下错误(或类似错误):

 ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve log using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.]

似乎没有 UDF 在 FOREACH GENERATE 中起作用。

【问题讨论】:

  • 你是如何安装 Pig 的?看来您的 PATH 设置不正确。

标签: hadoop apache-pig user-defined-functions udf


【解决方案1】:

Pig 对大小写有点挑剔,log 需要大写。例如,我可以在新的 Hortonworks Sandbox 上运行此代码。

$ hdfs dfs -cat /tmp/kg.csv
one,1
two,2
three,3

+

grunt> a = LOAD '/tmp/kg.csv' USING PigStorage(',') AS (txt:chararray, val:int);
grunt> b = FOREACH a GENERATE txt, val, LOG(val);
grunt> DUMP b;
... # Running some MapReduces
(one,1,0.0)
(two,2,0.6931471805599453)
(three,3,1.0986122886681098)

【讨论】:

  • 嗯。鉴于此和其他评论,这可能是我的设置。我会看看新沙盒对我有什么作用。
  • @wugology - 实际上,您的问题是 log 应该全部大写 - ReadTheDocs
  • 酷!接受我的回答吗?
猜你喜欢
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 2015-09-23
  • 2013-12-10
  • 2015-06-11
  • 2014-03-25
  • 1970-01-01
相关资源
最近更新 更多