如何使用pyspark对spark数据框中的仅一列进行排序?

akos:

我有一个Spark Dataframe看起来像这样:

|  time  | col1 | col2 |
|----------------------|
| 123456 |   2  |  A   |
| 123457 |   4  |  B   |
| 123458 |   7  |  C   |
| 123459 |   5  |  D   |
| 123460 |   3  |  E   |
| 123461 |   1  |  F   |
| 123462 |   9  |  G   |
| 123463 |   8  |  H   |
| 123464 |   6  |  I   |

现在,我需要对“ col1”-列进行排序,但其他列必须保持相同的顺序:(使用pyspark)

|  time  | col1 | col2 | col1_sorted |
|-----------------------------------|
|  same  | same | same |   sorted   |
|-----------------------------------|
| 123456 |   2  |  A   |     1      |
| 123457 |   4  |  B   |     2      |
| 123458 |   7  |  C   |     3      |
| 123459 |   5  |  D   |     4      |
| 123460 |   3  |  E   |     5      |
| 123461 |   1  |  F   |     6      |
| 123462 |   9  |  G   |     7      |
| 123463 |   8  |  H   |     8      |
| 123464 |   6  |  I   |     9      |

在此先感谢您的帮助!

jxc:

对于Spark 2.3.1,您可以尝试pandas_udf,请参见下文(假定原始数据帧按该time排序

from pyspark.sql.functions import pandas_udf, PandasUDFType
from pyspark.sql.types import StructType

schema = StructType.fromJson(df.schema.jsonValue()).add('col1_sorted', 'integer')

@pandas_udf(schema, PandasUDFType.GROUPED_MAP)
def get_col1_sorted(pdf):
  return pdf.sort_values(['time']).assign(col1_sorted=sorted(pdf["col1"]))
  
df.groupby().apply(get_col1_sorted).show()
+------+----+----+-----------+
|  time|col1|col2|col1_sorted|
+------+----+----+-----------+
|123456|   2|   A|          1|
|123457|   4|   B|          2|
|123458|   7|   C|          3|
|123459|   5|   D|          4|
|123460|   3|   E|          5|
|123461|   1|   F|          6|
|123462|   9|   G|          7|
|123463|   8|   H|          8|
|123464|   6|   I|          9|
+------+----+----+-----------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用python根据同一数据框中另一列的值对数据框中列中的值进行排序

根据列表对列进行排序,然后对数据框中的另一列进行排序

如何在apache spark中将一列与同一数据框中的列进行比较

使用列表在PySpark数据框中创建一列,该列表的索引位于数据框的一列中

根据列的值和另一列中列表的长度对数据框进行排序

熊猫:如何按一列的日期对数据框行进行排序

仅使用一列对嵌套列表进行排序

通过添加另一列来对我的熊猫数据框中的重复项进行排序

我想按一列中的重复项对数据框进行排序

在一列上按另一列对数据框进行排序-Pandas

pyspark - 如何添加一列,其中从数据框中搜索新列的值:

如何从一列中排序熊猫数据框

向pyspark中的数据框添加一列

在pyspark数据框中复制一列

Pyspark如何将一列与另一列的结果相乘 - 数据框中的计数?

如何在Pyspark中对数据框进行排序

从数据框中仅读取一列

在pyspark中,如何通过一列数据框循环过滤功能?

使用列值在 spark 数据框中投射另一列

根据一列对数据进行分组,然后使用数据框中的值构建行

如何使用对另一列的值进行测试来填充pandas数据框列?

使用整数数据类型,根据另一列的值对数据框进行排序

数据框,仅保留一列

按另一个数据框中的一列对pandas DataFrame进行排序-Pandas

如何在 NatTables 的一列中对各种数据类型进行排序

如何按第一列对每个新工作表中的新数据进行排序?

对R中数据框的一列进行计数

在另一列的每个级别内的数据框中重新排序一列

如何使用另一列中的值过滤列数据框中的数据?