hadoop - 错误1070 Apache Pig,使用内置UDF

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

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.]

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

最佳答案

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)

关于hadoop - 错误1070 Apache Pig,使用内置UDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33424929/

相关文章:

hadoop - 如果你把东西存到HBase里,能直接从HDFS访问吗?

hadoop - pig 中的多存储

hadoop - 在 Apache Pig Latin 中转置数据

java - pig : Read a bag and emit individual tuples

hadoop - Pig 如何在 'load' 语句中使用 Hadoop Glob?

python - PySpark 中日期时间的舍入时间

arrays - 对 Pyspark 中收集的列表执行线性回归

java - 为什么 YARN java 堆空间内存错误?

jdbc - Hive JDBC getConnection 不返回

python-3.x - Pyspark 中的 UDF 和 python 函数