加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 22:24:53 所属栏目:Python 来源:网络整理
导读:如何在pyspark中对A1,A2,A10,B1等的ID进行排序? 我希望能够对以下代码进行排序(实际列表与其他字母等相比较长)A-Z.如果我添加A13 新代码然后添加A-Z,我会得到A1,A11等 当我尝试使用orderBy进行排序时,我得到的数据如下: A1A10A11A2A21etc.. 最佳答案 您必

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

我希望能够对以下代码进行排序(实际列表与其他字母等相比较长)A-Z.如果我添加A13 – 新代码然后添加A-Z,我会得到A1,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’)…

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读