我从Pypark开始。。。我有以下问题,我正在尝试将每个id的最后一个数字分隔成一个新列:
|---------------------|------------------|
| Name | Number |
|---------------------|------------------|
| Bob | 34789 |
|---------------------|------------------|
对此:
|---------------------|------------------|---------------------|
| Name | Number_1 | Number_2 |
|---------------------|------------------|---------------------|
| Bob | 3478 | 9 |
|---------------------|------------------|---------------------|
有什么建议吗?
3条答案
按热度按时间mtb9vblg1#
使用
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|
+----+--------+--------+
clj7thdc2#
检查以下代码。
UDF
分割给定的数字应用
UDF
```scala>
df
.withColumn("number",splitNumber($"number"))
.select($"name",$"number.*")
.show(false)
+----+--------+-------+
|name|number_1|numer_2|
+----+--------+-------+
|Bob |3478 |9 |
+----+--------+-------+
bakd9h0s3#
看看这个。你可以先用
regexp_extract
获取最后一位以创建新列并使用regexp_replace
将最后一个数字替换为空字符串“”。