A = LOAD 'myData' USING PigStorage('|') AS (name: chararray, vals: chararray) ;
B = FOREACH A GENERATE name, STRSPLIT(vals, ',') AS svals: () ;
CL = FOREACH B GENERATE name,
svals.($0, $1, $2, $3, $4, $5, $6, $7, $8, $9) AS ten ;
-- ten can have a schema, like ten: (a1: chararray, etc.)
-- After giving it a schema, you can also flatten it to
-- make it like the output of CF, but with better types
1条答案
按热度按时间5q4ezhmt1#
有很多不同的方法可以做到这一点,具体取决于你有什么作为输入和输出的需要。我假设您只需要前10个值,其余的值可以直接抛出。
这就是我要做的(cl)。它比short way(cf)长一点,但代码对我来说更清晰,并且允许在命名模式时更灵活:
这是cl的结果架构和输出:
这种方式稍微短一点,但更难对值应用模式:
cf的架构和输出: