例如,假设我将两个不同的文件加载到一个pig脚本中
A = LOAD 'file1' USING PigStorage('\t') AS (
day:chararray,
month:chararray,
year:chararray,
message:chararray);
B = LOAD 'file2' USING PigStorage('\t) AS (
month:chararray,
day:chararray,
year:chararry,
message:chararray);
现在,注意字段的顺序是不同的,所以如果我将它们合并到一个文件中 C = UNION A, B;
我得到。。。
(2,OCT,2013,INFO INVALID USERNAME)
(OCT,3,2013,WARN STACK OVERFLOW)
如果为了使数据更容易读取,我想对字段重新排序,以便它们都遵循一种通用格式,并且每个字段都有相同的位置符号。
(2,OCT,2013,INFO INVALID USERNAME)
(3,OCT,2013,WARN STACK OVERFLOW)
这也出现在其他一些地方的消息,水平,主机等。它不仅是日期字段,我想让一切“漂亮”的周围。
在一些奇怪的伪代码中,我会寻找这样的东西:
D = FOREACH B
REORDER (month,day,year) TO (day,month,year);
我还没有找到任何人尝试这样做的例子,也没有看到一个函数可以做到这一点。所以也许这是不可能的,我一个人在这里,但如果有人有任何想法,我会感激一些提示。
1条答案
按热度按时间yxyvkwin1#
一般来说,这在pig中是不必要的,因为您只需按名称引用字段,而不必担心它们在记录中的位置。如果你的目标是
UNION
在这两种关系中,可以使用ONSCHEMA
关键字:也就是说,如果你真的需要重新排序一个关系,一个简单的
FOREACH...GENERATE
您只需要:请注意,在您的示例中,您实际上并没有处理元组,而是处理整个记录。如果你有一个元组,你可以使用
TOTUPLE
内置的自定义项,可满足您的需求: