Разделить последний di git на новый столбец в pyspark - PullRequest
0 голосов
/ 11 июля 2020

Я начинаю с pyspark ... У меня следующая проблема, и я пытаюсь разделить последние di git каждого идентификатора в новый столбец:

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

на это:

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

Есть предложения?

Ответы [ 3 ]

1 голос
/ 11 июля 2020

Используйте функцию substring для извлечения значения и создания новых столбцов.

Example:

df.show()
#+----+------+
#|Name|Number|
#+----+------+
#| Bob| 34789|
#+----+------+

from pyspark.sql.functions import *
df.withColumn("number_1",expr("substring(Number,1,length(Number)-1)")).\
withColumn("number_2",substring(col("Number"),-1,1)).\
drop("Number").\
show()

df.withColumn("number_1",expr("substring(Number,1,length(Number)-1)")).\
withColumn("number_2",expr("substring(number,-1,1)")).\
drop("Number").\
show()
#+----+--------+--------+
#|Name|number_1|number_2|
#+----+--------+--------+
#| Bob|    3478|       9|
#+----+--------+--------+
1 голос
/ 11 июля 2020

Проверьте код ниже.

UDF, чтобы разделить данный номер

scala> val splitNumber = udf((d:String) => (d.init,d.last), new StructType().add("number_1","string",true).add("numer_2","string",true))

Применение UDF

scala> 
df
.withColumn("number",splitNumber($"number"))
.select($"name",$"number.*")
.show(false)

+----+--------+-------+
|name|number_1|numer_2|
+----+--------+-------+
|Bob |3478    |9      |
+----+--------+-------+
1 голос
/ 11 июля 2020

Проверьте это. вы можете сначала использовать regexp_extract, чтобы получить последний di git, чтобы создать новый столбец, и используйте regexp_replace, чтобы заменить последний di git пустой строкой ''.

   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|
    # +----+--------+--------+
...