gpt4 book ai didi

python - 如何在 pyspark 中对 A1、A2、A10 等 ID 进行排序?

转载 作者:太空狗 更新时间:2023-10-30 01:18:10 25 4
gpt4 key购买 nike

如何在 pyspark 中对 A1、A2、A10、B1 等 ID 进行排序?

我希望能够对以下代码进行排序(实际列表因其他字母等而更长)A-Z。例如,如果我添加 A13 - 新代码,然后是 A-Z,我会得到 A1,A10,A11

当我尝试使用 orderBy 进行排序时,我得到的数据如下:

A1
A10
A11
A2
A21
etc..

最佳答案

您将不得不暂时拆分您的专栏以实现您想要的。以下代码:

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|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()

关于python - 如何在 pyspark 中对 A1、A2、A10 等 ID 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54387708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com