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 来自温度的初始零点。
提前致谢
是的,您可以使用 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
通常,如果我们在一行中有任何分隔符,我们就会这样做。
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 来自温度的初始零点。
提前致谢
是的,您可以使用 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