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

前端之家收集整理的这篇文章主要介绍了如何在pyspark中对A1,A2,A10等ID进行排序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

  1. A1
  2. A10
  3. A11
  4. A2
  5. A21
  6. etc..
最佳答案
您必须暂时拆分列以达到您想要的效果.以下代码

  1. from pyspark.sql import types as T
  2. vals = ['A1','F1','A10','A11','C23','A2','A21']
  3. tempNames = ['letter','number']
  4. df = spark.createDataFrame(vals,T.StringType())
  5. 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)
  6. df.show()

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

  1. +------+------+-----+
  2. |letter|number|value|
  3. +------+------+-----+
  4. | A| 1| A1|
  5. | F| 1| F1|
  6. | A| 10| A10|
  7. | A| 11| A11|
  8. | C| 23| C23|
  9. | A| 2| A2|
  10. | A| 21| A21|
  11. +------+------+-----+

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

  1. +-----+
  2. |value|
  3. +-----+
  4. | A1|
  5. | A2|
  6. | A10|
  7. | A11|
  8. | A21|
  9. | C23|
  10. | F1|
  11. +-----+

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

  1. 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相关文章