首页 > 解决方案 > 将最后一位数字分隔到pyspark中的新列

问题描述

我从 pyspark 开始......我有以下问题,我正在尝试将每个 id 的最后一位数字分隔到一个新列中:

|---------------------|------------------|
|         Name        |      Number      |
|---------------------|------------------|
|          Bob        |       34789      |
|---------------------|------------------|

对此:

|---------------------|------------------|---------------------|
|         Name        |      Number_1    |      Number_2       |
|---------------------|------------------|---------------------|
|          Bob        |       3478       |          9          |
|---------------------|------------------|---------------------|

有什么建议么?

标签: apache-sparkpyspark

解决方案


看一下这个。您可以先使用regexp_extract获取最后一位数字来创建新列,然后使用regexp_replace空字符串 '' 替换最后一位数字。

   from pyspark.sql import functions as F

    df.show()

    # +----+------+
    # |name|number|
    # +----+------+
    # | bob| 34789|
    # +----+------+

    df.withColumn("number_1",F.regexp_replace(F.col('number'),r'(\d$)','')).withColumn("number_2", F.regexp_extract(F.col('number'), r'(\d$)',1)).withColumn("number_1", F.regexp_replace(F.col('number'), r'(\d$)', '')).drop(F.col('number')).show()


    # +----+--------+--------+
    # |name|number_1|number_2|
    # +----+--------+--------+
    # | bob|    3478|       9|
    # +----+--------+--------+

推荐阅读