PIG:如何按一行中的位置分隔数据

时间:2015-03-14 13:21:43

标签: hadoop apache-pig

通常如果我们在一行中有任何分隔符。

load "pigtest.txt" using PigStorage(',') as (year:int,temp:float);

以下是单线数据的样本。

0029029070999991901010106004+64333+023450FM12+000599999V0202701N015919999999N0000001N9-00781+99999102001ADDGF108991999999999999999999

我需要提取年1901(16th position to 4positions) t emperature(89th position to 4 positions),以便我可以定义我的键和值。

我还需要从温度中修剪初始零点。

提前致谢

1 个答案:

答案 0 :(得分:1)

是的,您可以使用FixedWidthLoader UDF从输入数据中提取特定位置。下载piggybank.jar并尝试以下方法。

<强>输入

0029029070999991901010106004+64333+023450FM12+000599999V0202701N015919999999N0000001N9-00781+99999102001ADDGF108991999999999999999999

<强> PigScript:

REGISTER /tmp/piggybank.jar;
A = LOAD 'input' USING org.apache.pig.piggybank.storage.FixedWidthLoader('16-19,89-92') AS(year:int,temp:float);
DUMP A;

<强>输出:

(1901,781.0)

<强>参考:
http://pig.apache.org/docs/r0.13.0/api/org/apache/pig/piggybank/storage/FixedWidthLoader.html