概述
- 准备了两个 python 的udf函数,对比总结一下,有利于自己下次自己使用。
- 心得体会在上面,具体的对比过程在下面,想要看具体的过程往下翻
心得体会
1.基本模式
- 引用sys模块;
- 把数据按行进行导入处理
- 删除开头和结尾的空白符(包括'\n', '\r', '\t', ' ')
import sys
for line in sys.stdin:
detail = line.strip()
-
结尾输出基本模式——输出以'\t'做为分隔符分隔的列表 [fname, str(l_name)]
print '\t'.join([fname, str(l_name)])
2.不同处理方式
- 两种不同的赋值模式
- 第一种先确认分割后的值有两个再继续
- 第二种没有核对分割后的值是否有两个,不管是否有值,都在继续处理
'方式一'
for line in sys.stdin:
detail = line.strip().split("\t")
if len(detail) != 2:
continue
else:
name = detail[0]
idcard = detail[1]
'方式二'
for line in sys.stdin:
line = line.strip()
fname , lname = line.split(' ')
对比过程
1.udf函数
- 根据身份证识别男女
# -*- coding: utf-8 -*-
import sys
for line in sys.stdin:
detail = line.strip().split("\t")
if len(detail) != 2:
continue
else:
name = detail[0]
idcard = detail[1]
if len(idcard) == 15:
if int(idcard[-1]) % 2 == 0:
print("\t".join([name,idcard,"女"]))
else:
print("\t".join([name,idcard,"男"]))
elif len(idcard) == 18:
if int(idcard[-2]) % 2 == 0:
print("\t".join([name,idcard,"女"]))
else:
print("\t".join([name,idcard,"男"]))
else:
print("\t".join([name,idcard,"身份信息不合法!"]))
- 把一列值,根据空格拆成两列
#!/usr/bin/python
import sys
for line in sys.stdin:
line = line.strip()
fname , lname = line.split(' ')
l_name = lname.lower()
print '\t'.join([fname, str(l_name)])
2.udf函数使用
- 根据身份证识别男女
模版
SELECT TRANSFORM (<columns>)
USING 'python <python_script>'
AS (<columns>)
FROM <table>;
使用
select transform(name,idcard) USING 'python person.py' AS (name,idcard,gender) from person;
- 把一列值,根据空格拆成两列
模版
SELECT TRANSFORM(stuff)
USING 'script'
AS thing1, thing2
or
SELECT TRANSFORM(stuff)
USING 'script'
AS (thing1 INT, thing2 INT)
使用
select TRANSFORM (fname) USING "python iteblog.py" as (fname,lname) from zhengyuan.mytable;
网友评论