如何在 Pig 中创建不区分大小写的匹配?

Posted

技术标签:

【中文标题】如何在 Pig 中创建不区分大小写的匹配?【英文标题】:How do I create a case insensitive match in Pig? 【发布时间】:2015-02-25 18:37:34 【问题描述】:

假设我有以下文件,学生们

John
Mary
Bill
Joe

然后我按如下方式加载我的数据:

a = load 'student' as (name:chararray);

我希望 b 的结果不区分大小写:

b = filter a by name matches ('.*john.*');

即返回一个匹配项,(John)。我尝试使用'?i.*john.*' 设置正则表达式的模式,但这似乎不起作用。

【问题讨论】:

LOWER(Name) 匹配怎么样...? 是的,LOWER(name) 或 UPPER(name) 然后去匹配 【参考方案1】:

原因是您忘记关闭不区分大小写部分的括号。 正确的语法是'(?i).*john.*'

你可以试试这个过滤器 stmt 吗?

b = filter a by name matches '(?i).*john.*';

【讨论】:

【参考方案2】:

我知道这是一种丑陋的做法,但你可以试试这个 -

.*[Jj][Oo][Hh][Nn].*

【讨论】:

以上是关于如何在 Pig 中创建不区分大小写的匹配?的主要内容,如果未能解决你的问题,请参考以下文章

Pig Latin 中不区分大小写的搜索

如何使 yarp 匹配路径不区分大小写?

如何匹配区分大小写的用户名和密码

如何在最终的 TreeSet 中创建硬编码的不区分大小写的值,以便只有“香蕉”而不是“香蕉”作为另一个值 [重复]

如何从任何对象键中过滤不区分大小写的对象数组

正则表达式:忽略区分大小写