Я написал код свиньи, где я хочу сопоставить столбец с несколькими строками. Например.ОШИБКА 2998: необработанная внутренняя ошибка. null - Apache Pig
A = FOREACH A1 GENERATE
c1, c2, c3,
--i have substituted junk values--
case
when ( (
column_name matches '.*abc.*'
OR column_name matches '.*sdf.*'
OR column_name matches '.*bcd.*'
OR column_name MATCHES '.*def.*'
OR column_name MATCHES '.*efg.*'
OR column_name MATCHES '.*ggg.*'
OR column_name MATCHES '.*ghi.*'
OR column_name MATCHES '.*hij.*'
OR column_name MATCHES '.*ijk.*'
OR column_name MATCHES '.*jkl.*'
OR column_name MATCHES '.*klm.*'
OR column_name MATCHES '.*lmn.*'
or column_name matches '.*mno.*'
or column_name matches '.*mnb.*'
or column_name matches '.*opq.*'
or column_name matches '.*pqr.*'
or column_name matches '.*qrs.*'
or column_name matches '.*stuv.*'
or column_name matches '.*tuvw.*'
or column_name matches '.*wxy.*'
or column_name matches '.*tuvwx.*'
or column_name matches '.*xyz.*'
.
.
.
.
.
) then 1
else 0 as c4;
Следует отметить, что, когда число ИЛИ column_name МАТЧИ «---» заявления выходят за рамки 672, сценарий свинья не запускается с ошибкой:
Pig Stack Trace
---------------
ERROR 2998: Unhandled internal error. null
java.lang.StackOverflowError
at java.util.zip.Deflater.ensureOpen(Deflater.java:543)
at java.util.zip.Deflater.deflate(Deflater.java:426)
at java.util.zip.Deflater.deflate(Deflater.java:352)
at java.util.zip.DeflaterOutputStream.deflate(DeflaterOutputStream.java:251)
at java.util.zip.DeflaterOutputStream.write(DeflaterOutputStream.java:211)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1876)
at java.io.ObjectOutputStream$BlockDataOutputStream.write(ObjectOutputStream.java:1840)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1533)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at java.util.ArrayList.writeObject(ArrayList.java:742)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at java.util.ArrayList.writeObject(ArrayList.java:742)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at java.util.ArrayList.writeObject(ArrayList.java:742)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Просьба предложить решение или альтернативу для удовлетворения этого требования.
UPD: вы генерируете, а не фильтр, поэтому должна быть функция eval https://pig.apache.org/docs/r0.16.0/udf.html#eval-functions – patrungel
Итак, в основном мне нужно написать UDF и найдите значение столбца (подстроку) в требуемом наборе значений, например ('abc | def | ghi | jkl | mno'). Это правильное понимание @patrungel? – Suyog
Правильно для написания UDF, но это не для поиска значения столбца в вашем списке; по крайней мере, у меня сложилось впечатление, что вы ищете шаблоны _in_ значений. – patrungel