【发布时间】:2015-07-14 10:37:24
【问题描述】:
我需要在 Python 中为 Pig 数据转换作业编写一些用户定义的函数。为了描述这种情况,正在解析和馈送数据,Pig 脚本将为列中的每个数据字段调用这个 Python UDF。
大多数 UDF 在本质上是相似的,我需要从本质上将字符串与“某物 + 通配符”进行匹配。我知道regex 并且到目前为止一直在使用它,但在我进一步了解之前,我想确保这是一种匹配字符串的有效方法,因为脚本将迭代和调用 UDF 数千次。
举个例子:假设我们有一个字段需要匹配sales。该字段的可能值可能是任何值,因为源数据将来可能会变得古怪并随机附加一些内容并吐出saleslol。其他可能的值为sales.、salessales、sales.yes。
“销售”之后的内容无关紧要;如果它以sales 开头,那么我想抓住它。
那么下面的方法有效吗? word 变量是销售列的输入或值。第一行是 Pig 脚本
@outputSchema("num:int")
def rule2(word):
sales_match = re.match('sales', word, flags=re.IGNORECASE)
if sales_match:
return 1
else:
return 0
2
我有另一种情况,我需要匹配 4 个确切的已知字符串。这也有效吗?
@outputSchema("num:int")
def session1(word):
if word in ['first', 'second', 'third', 'fourth']:
return 1
else:
return 0
【问题讨论】:
-
你为什么要问它是否有效?您是否尝试过测试它?
-
.startswith() 是你的朋友...
-
@jonrsharpe 是的,我已经测试过了。但是我对这类东西的了解不足,我不知道其他方法可以进行所说的匹配,这就是我问的原因
标签: python regex string-matching