【问题标题】:modify a string column and replace substring pypsark修改字符串列并替换子字符串 pyspark
【发布时间】:2021-12-13 03:18:55
【问题描述】:

我有一个 pyspark 数据框,其名称列的示例值如下:

 id   NAME
 ---+-------
  1  aaa bb c
  2  xx yy z
  3  abc def 
  4  qw er
  5  jon lee ls G

我必须翻转最右边的部分并在左侧用逗号填充它并删除最右边的子字符串(使用空格分割)

预期输出

id   NAME
---+-------
 1   c, aaa bb
 2   z, xx yy
 3   def, abc
 4   er, qw
 5   G, jon lee ls 

通过使用以下代码,我能够得到最正确的部分以用逗号添加它: split_col=split(df['NAME'],'') df2 = df2.withColumn('NAME_RIGHT',split_col.getItem(F.size(split_col) - 1))

上面的行给出了

NAME_RIGHT
  c
  z
  def 
  er

我想替换 NAME_RIGHT 中的值,即 NAME 列中最右边的值,我尝试使用下面的代码,但它什么也没替换,如何实现?

df3 = df2.withColumn('NEW_NAME', regexp_replace(F.col("NAME"), str(df2.NAME_RIGHT),""))

【问题讨论】:

    标签: pyspark replace apache-spark-sql str-replace regexp-replace


    【解决方案1】:

    Regex 会有点麻烦,我建议改用split 和concat。

    from pyspark.sql import functions as F
    
    (df
        .withColumn('n1', F.split('name', ' '))
        .withColumn('n2', F.reverse('n1')[0])
        .withColumn('n3', F.concat_ws(' ', F.array_except('n1', F.array('n2'))))
        .withColumn('n4', F.concat_ws(', ', F.array('n2', 'n3')))
        .show()
    )
    
    # +---+------------+-----------------+---+----------+-------------+
    # | id|        name|               n1| n2|        n3|           n4|
    # +---+------------+-----------------+---+----------+-------------+
    # |  1|    aaa bb c|     [aaa, bb, c]|  c|    aaa bb|    c, aaa bb|
    # |  2|     xx yy z|      [xx, yy, z]|  z|     xx yy|     z, xx yy|
    # |  3|    abc def |     [abc, def, ]|   |   abc def|    , abc def|
    # |  4|       qw er|         [qw, er]| er|        qw|       er, qw|
    # |  5|jon lee ls G|[jon, lee, ls, G]|  G|jon lee ls|G, jon lee ls|
    # +---+------------+-----------------+---+----------+-------------+
    

    【讨论】:

      猜你喜欢
      • 2022-11-20
      • 2019-12-28
      • 2022-12-15
      • 2014-11-22
      • 2017-06-22
      • 1970-01-01
      • 2017-04-24
      • 2017-03-23
      • 2020-04-05
      相关资源
      最近更新 更多