Converting single tuple with multiple bags into multiple tuples in Pig
I have a line like the following:
I am interested in extracting the lid, pid, ppt, and qty out of the line and creating a tuple for every entry in the pid, ppt and qty.
I’ve been able to accomplish this for one of those fields with the following:
logs = foreach logs generate
REGEX_EXTRACT(original_path, ‘lid=([^&]+)’, 1) as login_id,
FLATTEN(TOKENIZE(REPLACE(REGEX_EXTRACT(original_path, ‘.*pid=([^&]+)’, 1), ‘,’, ‘ ‘))) as pid;
This gives me:
However, I want to do this for the other two fields as well (leaving it at three tuples) and multiple flattens in the same foreach statement isn’t going to give me what I want.
1030023 000000000001076056 996 1
1030023 000000000001072654 246 1
1030023 000000000001067925 366 1
I am guessing this is going to require a UDF, but I’d like to know if there’s another way around it by using only the provided functions in Pig.
Support from the Experts
A HDP Support Subscription connects you experts with deep experience running Apache Hadoop in production, at-scale on the most demanding workloads.
Become HDP Certified
Real world training designed by the core architects of Hadoop. Scenario-based training courses are available in-classroom or online from anywhere in the world