python怎么命名编号a1、a2_如何在pyspark中对A1,A2,A10等ID进行排序?

您必须暂时拆分列以达到您想要的效果.以下代码:

from pyspark.sql import types as T

vals = ['A1','F1','A10','A11','C23','A2','A21']

tempNames = ['letter','number']

df = spark.createDataFrame(vals,T.StringType())

df = df.select(F.regexp_extract('value',"(\w)",1).alias(tempNames[0]),F.regexp_extract('value',"\w(\d*)",1).cast('int').alias(tempNames[1]),df.value).orderBy(tempNames).drop(*tempNames)

df.show()

从您的列暂时创建两列(‘letter’和’number’)…

+------+------+-----+

|letter|number|value|

+------+------+-----+

| A| 1| A1|

| F| 1| F1|

| A| 10| A10|

| A| 11| A11|

| C| 23| C23|

| A| 2| A2|

| A| 21| A21|

+------+------+-----+

…并使用它们对列进行排序:

+-----+

|value|

+-----+

| A1|

| A2|

| A10|

| A11|

| A21|

| C23|

| F1|

+-----+

@pault所说的更简短的解决方案:

df.orderBy(F.regexp_extract(F.col("value"),r"[A-Za-z]+",0),F.regexp_extract(F.col("value"),r"\d+",0).cast('int')).show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值