用于添加列的 java udf
Posted
技术标签:
【中文标题】用于添加列的 java udf【英文标题】:java udf for adding columns 【发布时间】:2015-08-12 09:44:01 【问题描述】:我正在编写 java udf 函数以通过比较位置列来添加 pincode。这是我的代码。
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.commons.lang3.StringUtils;
public class MB_pincodechennai extends EvalFunc<String>
private String pincode(String input)
String property_pincode = null;
String[] items = new String[]"600088", "600016", "600053", "600070", "600040", "600106", "632301", "600109", "600083", "600054", "600023", "600095", "600077", "600073", "600003", "603001", "600064", "600094", "600044", "600008",
;
for (String itm : items)
if (StringUtils.containsIgnoreCase(input, itm))
property_pincode = itm;
break;
return property_pincode;
public String exec(Tuple input) throws IOException
if (input == null || input.size() == 0)
return null;
try
String str = (String) input.get(0);
return pincode(str);
catch (Exception e)
return null;
这个地方看起来像这样 adyar,tambaram,pallavaram,chromepet...
当我运行上面它只打印空白值。我不知道我的错误在哪里。任何帮助将不胜感激。
【问题讨论】:
您能否展示您发送到 UDF 的输入列中的数据示例? 【参考方案1】:如果您更改以下内容以返回“无效输入”。那么你会在 Pig 控制台中得到 Invalid Input。
catch (Exception e)
return null; // Change this to return "Invalid Input"
原因:
问题是您试图从 Pig 脚本中传递 pincode=600073(即整数)。并且您正在将其作为 Java UDF 中的字符串读取。此铸造不起作用。
MB_pincodechennai(pincode) -- pincode is passed as integer.
对于这个问题,您有 2 种方法; 1) 您可以在 pig 脚本中将 pincode 字段作为 String 而不是 int。
2) 在进行匹配之前,您可以在 Java 结束时从 Integer 解析为 String。
String str = Integer.toString(input);
请查看 Mapping 以了解有关握手的更多详细信息: http://pig.apache.org/docs/r0.11.0/udf.html#udf-java
【讨论】:
以上是关于用于添加列的 java udf的主要内容,如果未能解决你的问题,请参考以下文章
使用 udf 传递列作为参数将自定义列添加到 pyspark 数据帧