gpt4 book ai didi

hadoop - 替换 Pig 元组中字段的值

转载 作者:可可西里 更新时间:2023-11-01 15:40:16 25 4
gpt4 key购买 nike

我有两个数据集要加入。这是它们的样子:

 Dataset 1
---#----#----#------------#----#-----#-----
F1 | F2 | F3 | UID | F4 | ... | F32
---#----#----#------------#----#-----#-----
a1 | b1 | c1 | MD5 value1 | d1 | ... | foo1
a2 | b2 | c2 | MD5 value2 | d2 | ... | foo2
a3 | b3 | c3 | MD5 value3 | d3 | ... | foo3
a4 | b4 | c4 | MD5 value4 | d4 | ... | foo4

Dataset 2
----#-----#--------------#-----#-----#-----
Z1 | Z2 | UID+Constant | Z3 | ... | Z62
----#-----#--------------#-----#-----#-----
p1 | q1 | MD5 value1+C | s1 | ... | t1
p2 | q2 | MD5 value2+C | s2 | ... | t2
p3 | q3 | MD5 value3+C | s3 | ... | t3
p4 | q4 | MD5 value4+C | s4 | ... | t4

现在我使用明确的字段名称来加载两个数据集:

D1 = LOAD '/dataset1' USING PigStorage(',')
AS (F1:chararray, F2:chararray, F3:chararray, UID:chararray, ... , F32:chararray);

D2 = LOAD '/dataset2' USING PigStorage(',')
AS (Z1:chararray, Z2:chararray, UID_C:chararray, ... , Z62:chararray);

现在,当我加入 UID 值时,我想从两个数据集中获得组合输出。因此,我使用 REGEX_EXTRACT_ALL 拆分了 D2 中的 UID_C 字段。这是我的做法。

D2_SPLIT_UID_C = FOREACH D2 GENERATE *,
FLATTEN(REGEX_EXTRACT_ALL(UID_C, '^(.*)\+(.*)$'))
AS (UID:chararray, C:chararray);

然后我在两个数据集上加入 UID

JOINED_DATA = JOIN D1 BY UID, D2_SPLIT_UID_C BY UID;

到这里为止都很好,但是现在,我必须生成没有 UID_C 字段的输出。相反,我需要用 UID 的值替换它。此外,我的最终输出中不需要 Constant(C)

因此,我需要先从 D1 生成数据,然后再从 D2 生成数据。所以这是我最终输出的输出 header

---#----#----#------------#----#-----#-----#----#----#-----#----#-----#----
F1 | F2 | F3 | UID | F4 | ... | F32 | Z1 | Z2 | UID | Z3 | ... | Z62
---#----#----#------------#----#-----#-----#----#----#-----#----#-----#----

这就是它变得丑陋的地方。我需要再次将 dataset1 和 dataset2 中的所有字段放入我的最终 FOREACH GENERATE F1, F2, F3, UID, ...., F32, Z1, Z2, UID, Z3, ...., Z62。这样,如果明天我的架构发生变化,我也必须在此处进行更新。

我不能用 UID 值替换 UID_C 列值,然后我只需要使用 FOREACH GENERATE * 就可以完成吗?

最佳答案

您可以使用 project-range定义字段范围的表达式,例如:
跳过 UID_C 以及 MD5 和之后的常量:

D2_SPLIT_UID_C = FOREACH D2 GENERATE Z1 .. Z2, Z3 .. Z62, 
FLATTEN(REGEX_EXTRACT(UID_C, '^(.*)\\+.*$', 1)) AS (UID:chararray);

关于hadoop - 替换 Pig 元组中字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16840483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com