我希望将 ISO 时间格式转换为 yyyy-mm-dd hh:mm:ss.SSS。但是我无法实现转换。我是 pig 的新手,我正在尝试编写一个 udf 来处理从 ISO 格式到 yyyy-mm-dd hh:mm:ss.SSS 的转换。
请指导我,我尝试了 pig (FORMAT,DATE_FORMAT) 的内置函数,但是无法将数据转换为所需的格式。
当前数据格式:2013-08-22T13:23:18.226220+01:00
要求的数据格式:2013-08-22 13:23:18.226
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.EvalFunc;
import org.joda.time.DateTime;
import org.joda.time.format.*;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.DateTimeFormatterBuilder;
public class test extends EvalFunc<String>{
public String exec(Tuple input) throws IOException {
if ((input == null) || (input.size() == 0))
return null;
try{
String time = (String)input.get(0);
DateFormat dt = new SimpleDateFormat ("yyyy-mm-dd hh:mm:ss.SSS");
Date d_t = dt.parse(time);
String timedt = getTimedt(d_t);
return timedt;
} catch (ParseException e) {
return null;
}
}
private String getTimedt(Date d_t) {
DateTimeFormatterBuilder formatter = new DateTimeFormatterBuilder();
}
}
我如何处理 pig 中的日期转换?
最佳答案
对于 pig 0.11.1,从 ISO 8601 格式转换为 yyyy-mm-dd hh:mm:ss.SSS 格式不需要 UDF。以下示例代码展示了如何将一列 ISO 8601 格式日期转换为 yyyy-MM-dd HH:mm:ss.SSS 日期。
converted_dates = FOREACH input_dates GENERATE ToString(date,'yyyy-MM-dd HH:mm:ss.SSS') as date:chararray;
注意:
我认为没有记录 ToString 函数...我从这个 Google SOC 提案中猜测了这种用法:
http://www.google-melange.com/gsoc/proposal/review/google/gsoc2012/zjshen/21002
其中提到以下函数需要从 piggybank UDF 转换为内置函数。
String ToString(DateTime d, String format)
我的猜测是它已被转换,但尚未进入主文档。这是内置 ToString 的类文档:
http://pig.apache.org/docs/r0.11.1/api/org/apache/pig/builtin/ToString.html
但是我们可以看到 apache 的 pig 文档中缺少 ToString 函数:
关于java - iso 的 pig UDF 到 yyyy-mm-dd hh :mm:ss. 000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18656852/