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

PIG : how to separate data by positions in a single line

通常,如果我们在一行中有任何分隔符,我们就会这样做。

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

下面是单行数据的示例。

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

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

我还需要 trim 来自温度的初始零点。

提前致谢

是的,您可以使用 FixedWidthLoaderUDF 从输入数据中提取特定位置。下载 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