9.2 字符串函数
ascii(col)
:返回一个数值列,它是旧列的字符串中的首个字母的ascii
值。其中col
必须是字符串列。base64(col)
:返回一个字符串列,它是旧列(二进制值)的BASE64
编码得到的字符串。其中col
必须是二进制列。bin(col)
:返回一个字符串列,它是旧列(二进制值)的字符串表示(如二进制1101
的字符串表示为'1101'
)其中col
必须是二进制列。cov(col,fromBase,toBase)
:返回一个字符串列,它是一个数字的字符串表达从fromBase
转换到toBase
。参数:
col
:一个字符串列,它是数字的表达。如1028
。它的基数由fromBase
给出fromBase
:一个整数,col
中字符串的数值的基数。toBase
:一个整数,要转换的数值的基数。
示例:
df = spark_session.createDataFrame([("010101",)], ['n'])
df.select(conv(df.n, 2, 16).alias('hex')).collect()
# 结果:[Row(hex=u'15')]
concat(*cols)
:创建一个新列,它是指定列的字符串拼接的结果(没有分隔符)。参数
cols
:列名字符串列表,或者Column
列表。要求这些列具有同样的数据类型
concat_ws(sep,*cols)
:创建一个新列,它是指定列的字符串使用指定的分隔符拼接的结果。参数
sep
:一个字符串,表示分隔符cols
:列名字符串列表,或者Column
列表。要求这些列具有同样的数据类型
decode(col,charset)
:从二进制列根据指定字符集来解码成字符串。参数:
col
:一个字符串或者Column
,为二进制列charset
:一个字符串,表示字符集。
encode(col,charset)
:把字符串编码成二进制格式。参数:
col
:一个字符串或者Column
,为字符串列charset
:一个字符串,表示字符集。
format_number(col,d)
:格式化数值成字符串,根据HALF_EVEN
来四舍五入成d
位的小数。参数:
col
:一个字符串或者Column
,为数值列d
:一个整数,格式化成表示d
位小数。
format_string(format,*cols)
:返回print
风格的格式化字符串。参数:
format
:print
风格的格式化字符串。如%s%d
cols
:一组列名或者Columns
,用于填充format
hex(col)
:计算指定列的十六进制值(以字符串表示)。参数:
col
:一个字符串或者Column
,为字符串列、二进制列、或者整数列
initcap(col)
:将句子中每个单词的首字母大写。参数:
col
:一个字符串或者Column
,为字符串列
input_file_name()
:为当前的spark task
的文件名创建一个字符串列instr(str,substr)
:给出substr
在str
的首次出现的位置。位置不是从0开始,而是从1开始的。如果
substr
不在str
中,则返回 0 。如果
str
或者substr
为null
,则返回null
。参数:
str
:一个字符串或者Column
,为字符串列substr
:一个字符串
locate(substr,str,pos=1)
:给出substr
在str
的首次出现的位置(在pos
之后)。位置不是从0开始,而是从1开始的。如果
substr
不在str
中,则返回 0 。如果
str
或者substr
为null
,则返回null
。参数:
str
:一个字符串或者Column
,为字符串列substr
:一个字符串pos
::起始位置(基于0开始)
length(col)
:计算字符串或者字节的长度。参数:
col
:一个字符串或者Column
,为字符串列,或者为字节列。
levenshtein(left,right)
:计算两个字符串之间的Levenshtein
距离。Levenshtein
距离:刻画两个字符串之间的差异度。它是从一个字符串修改到另一个字符串时,其中编辑单个字符串(修改、插入、删除)所需要的最少次数。lower(col)
:转换字符串到小写lpad(col,len,pad)
:对字符串,向左填充。参数:
col
:一个字符串或者Column
,为字符串列len
:预期填充后的字符串长度pad
:填充字符串
ltrim(col)
:裁剪字符串的左侧空格md5(col)
:计算指定列的MD5
值(一个32字符的十六进制字符串)regexp_extract(str,pattern,idx)
:通过正则表达式抽取字符串中指定的子串 。参数:
str
:一个字符串或者Column
,为字符串列,表示被抽取的字符串。pattern
: 一个Java
正则表达式子串。idx
:表示抽取第几个匹配的结果。
- 返回值:如果未匹配到,则返回空字符串。
.regexp_replace(str,pattern,replacement)
: 通过正则表达式替换字符串中指定的子串。参数:
str
:一个字符串或者Column
,为字符串列,表示被替换的字符串。pattern
: 一个Java
正则表达式子串。replacement
:表示替换的子串
- 返回值:如果未匹配到,则返回空字符串。
repeat(col,n)
:重复一个字符串列n
次,结果返回一个新的字符串列。参数:
col
:一个字符串或者Column
,为字符串列n
:一个整数,表示重复次数
reverse(col)
:翻转一个字符串列,结果返回一个新的字符串列rpad(col,len,pad)
:向右填充字符串到指定长度。参数:
col
:一个字符串或者Column
,为字符串列len
: 指定的长度pad
:填充字符串
rtrim(col)
:剔除字符串右侧的空格符sha1(col)
: 以16进制字符串的形式返回SHA-1
的结果sha2(col,numBites)
:以16进制字符串的形式返回SHA-2
的结果。numBites
指定了结果的位数(可以为244,256,384,512
,或者0
表示256
)soundex(col)
:返回字符串的SoundEx
编码split(str,pattern)
: 利用正则表达式拆分字符串。产生一个array
列参数:
str
:一个字符串或者Column
,为字符串列pattern
:一个字符串,表示正则表达式
substring(str,pos,len)
:抽取子串。参数:
str
:一个字符串或者Column
,为字符串列,或者字节串列pos
:抽取的起始位置len
:抽取的子串长度
- 返回值:如果
str
表示字符串列,则返回的是子字符串。如果str
是字节串列,则返回的是字节子串。
substring_index(str,delim,count)
:抽取子串参数:
str
: 一个字符串或者Column
,为字符串列delim
:一个字符串,表示分隔符count
:指定子串的下标。 如果为正数,则从左开始,遇到第count
个delim
时,返回其左侧的内容; 如果为负数,则从右开始,遇到第abs(count)
个delim
时,返回其右侧的内容;
示例:
df = spark.createDataFrame([('a.b.c.d',)], ['s'])
df.select(substring_index(df.s, '.', 2).alias('s')).collect()
# [Row(s=u'a.b')]
df.select(substring_index(df.s, '.', -3).alias('s')).collect()
# [Row(s=u'b.c.d')]
translate(srcCol,matching,replace)
:将srcCol
中指定的字符替换成另外的字符。参数:
srcCol
: 一个字符串或者Column
,为字符串列matching
: 一个字符串。只要srcCol
中的字符串,有任何字符匹配了它,则执行替换replace
:它一一对应于matching
中要替换的字符
示例:
df = spark.createDataFrame([('translate',)], ['a'])
df.select(translate('a', "rnlt", "123") .alias('r')).collect()
# [Row(r=u'1a2s3ae')]
# r->1, n->2,l->3, t->空字符
trim(col)
:剔除字符串两侧的空格符unbase64(col)
: 对字符串列执行BASE64
编码,并且返回一个二进制列unhex(col)
:对字符串列执行hex
的逆运算。 给定一个十进制数字字符串,将其逆转换为十六进制数字字符串。upper(col)
:将字符串列转换为大写格式