9.2 字符串函数

  1. ascii(col):返回一个数值列,它是旧列的字符串中的首个字母的ascii 值。其中col 必须是字符串列。

  2. base64(col):返回一个字符串列,它是旧列(二进制值)的BASE64编码得到的字符串。其中col 必须是二进制列。

  3. bin(col):返回一个字符串列,它是旧列(二进制值)的字符串表示(如二进制1101 的字符串表示为'1101' )其中col 必须是二进制列。

  4. cov(col,fromBase,toBase):返回一个字符串列,它是一个数字的字符串表达从fromBase 转换到toBase

    • 参数:

      • col:一个字符串列,它是数字的表达。如1028。它的基数由fromBase 给出
      • fromBase:一个整数,col 中字符串的数值的基数。
      • toBase:一个整数,要转换的数值的基数。
    • 示例:

      1. df = spark_session.createDataFrame([("010101",)], ['n'])
      2. df.select(conv(df.n, 2, 16).alias('hex')).collect()
      3. # 结果:[Row(hex=u'15')]
  5. concat(*cols):创建一个新列,它是指定列的字符串拼接的结果(没有分隔符)。

    • 参数

      • cols:列名字符串列表,或者Column 列表。要求这些列具有同样的数据类型
  6. concat_ws(sep,*cols):创建一个新列,它是指定列的字符串使用指定的分隔符拼接的结果。

    • 参数

      • sep:一个字符串,表示分隔符
      • cols:列名字符串列表,或者Column 列表。要求这些列具有同样的数据类型
  7. decode(col,charset):从二进制列根据指定字符集来解码成字符串。

    • 参数:

      • col:一个字符串或者Column,为二进制列
      • charset:一个字符串,表示字符集。
  8. encode(col,charset):把字符串编码成二进制格式。

    • 参数:

      • col:一个字符串或者Column,为字符串列
      • charset:一个字符串,表示字符集。
  9. format_number(col,d):格式化数值成字符串,根据HALF_EVEN 来四舍五入成d 位的小数。

    • 参数:

      • col:一个字符串或者Column,为数值列
      • d:一个整数,格式化成表示d 位小数。
  10. format_string(format,*cols):返回print 风格的格式化字符串。

    • 参数:

      • formatprint 风格的格式化字符串。如%s%d
      • cols:一组列名或者Columns,用于填充format
  11. hex(col):计算指定列的十六进制值(以字符串表示)。

    • 参数:

      • col:一个字符串或者Column,为字符串列、二进制列、或者整数列
  12. initcap(col):将句子中每个单词的首字母大写。

    • 参数:

      • col:一个字符串或者Column,为字符串列
  13. input_file_name():为当前的spark task 的文件名创建一个字符串列

  14. instr(str,substr):给出substrstr 的首次出现的位置。位置不是从0开始,而是从1开始的。

    如果substr 不在str 中,则返回 0 。

    如果str 或者 substrnull,则返回null

    • 参数:

      • str:一个字符串或者Column,为字符串列
      • substr:一个字符串
  15. locate(substr,str,pos=1):给出substrstr 的首次出现的位置(在pos 之后)。位置不是从0开始,而是从1开始的。

    如果substr 不在str 中,则返回 0 。

    如果str 或者 substrnull,则返回null

    • 参数:

      • str:一个字符串或者Column,为字符串列
      • substr:一个字符串
      • pos::起始位置(基于0开始)
  16. length(col):计算字符串或者字节的长度。

    • 参数:

      • col:一个字符串或者Column,为字符串列,或者为字节列。
  17. levenshtein(left,right):计算两个字符串之间的Levenshtein 距离。

    Levenshtein 距离:刻画两个字符串之间的差异度。它是从一个字符串修改到另一个字符串时,其中编辑单个字符串(修改、插入、删除)所需要的最少次数。

  18. lower(col):转换字符串到小写

  19. lpad(col,len,pad):对字符串,向左填充。

    • 参数:

      • col:一个字符串或者Column,为字符串列
      • len:预期填充后的字符串长度
      • pad:填充字符串
  20. ltrim(col):裁剪字符串的左侧空格

  21. md5(col):计算指定列的MD5 值(一个32字符的十六进制字符串)

  22. regexp_extract(str,pattern,idx):通过正则表达式抽取字符串中指定的子串 。

    • 参数:

      • str:一个字符串或者Column,为字符串列,表示被抽取的字符串。
      • pattern: 一个Java 正则表达式子串。
      • idx:表示抽取第几个匹配的结果。
    • 返回值:如果未匹配到,则返回空字符串。
  23. .regexp_replace(str,pattern,replacement): 通过正则表达式替换字符串中指定的子串。

    • 参数:

      • str:一个字符串或者Column,为字符串列,表示被替换的字符串。
      • pattern: 一个Java 正则表达式子串。
      • replacement:表示替换的子串
    • 返回值:如果未匹配到,则返回空字符串。
  24. repeat(col,n):重复一个字符串列n次,结果返回一个新的字符串列。

    • 参数:

      • col:一个字符串或者Column,为字符串列
      • n:一个整数,表示重复次数
  25. reverse(col):翻转一个字符串列,结果返回一个新的字符串列

  26. rpad(col,len,pad):向右填充字符串到指定长度。

    • 参数:

      • col:一个字符串或者Column,为字符串列
      • len: 指定的长度
      • pad:填充字符串
  27. rtrim(col):剔除字符串右侧的空格符

  28. sha1(col): 以16进制字符串的形式返回SHA-1 的结果

  29. sha2(col,numBites):以16进制字符串的形式返回SHA-2 的结果。

    numBites 指定了结果的位数(可以为 244,256,384,512,或者0表示256

  30. soundex(col):返回字符串的SoundEx 编码

  31. split(str,pattern): 利用正则表达式拆分字符串。产生一个array

    • 参数:

      • str:一个字符串或者Column,为字符串列
      • pattern:一个字符串,表示正则表达式
  32. substring(str,pos,len):抽取子串。

    • 参数:

      • str:一个字符串或者Column,为字符串列,或者字节串列
      • pos:抽取的起始位置
      • len:抽取的子串长度
    • 返回值:如果str 表示字符串列,则返回的是子字符串。如果str 是字节串列,则返回的是字节子串。
  33. substring_index(str,delim,count):抽取子串

    • 参数:

      • str: 一个字符串或者Column,为字符串列
      • delim:一个字符串,表示分隔符
      • count:指定子串的下标。 如果为正数,则从左开始,遇到第countdelim 时,返回其左侧的内容; 如果为负数,则从右开始,遇到第abs(count)delim 时,返回其右侧的内容;
    • 示例:

      1. df = spark.createDataFrame([('a.b.c.d',)], ['s'])
      2. df.select(substring_index(df.s, '.', 2).alias('s')).collect()
      3. # [Row(s=u'a.b')]
      4. df.select(substring_index(df.s, '.', -3).alias('s')).collect()
      5. # [Row(s=u'b.c.d')]
  34. translate(srcCol,matching,replace):将srcCol 中指定的字符替换成另外的字符。

    • 参数:

      • srcCol: 一个字符串或者Column,为字符串列
      • matching: 一个字符串。只要srcCol 中的字符串,有任何字符匹配了它,则执行替换
      • replace:它一一对应于matching 中要替换的字符
    • 示例:

      1. df = spark.createDataFrame([('translate',)], ['a'])
      2. df.select(translate('a', "rnlt", "123") .alias('r')).collect()
      3. # [Row(r=u'1a2s3ae')]
      4. # r->1, n->2,l->3, t->空字符
  35. trim(col):剔除字符串两侧的空格符

  36. unbase64(col): 对字符串列执行BASE64 编码,并且返回一个二进制列

  37. unhex(col):对字符串列执行hex 的逆运算。 给定一个十进制数字字符串,将其逆转换为十六进制数字字符串。

  38. upper(col):将字符串列转换为大写格式