【问题标题】:How to sort rows of dataframe in pyspark如何在pyspark中对数据框的行进行排序
【发布时间】:2017-11-14 04:42:09
【问题描述】:

我有一个包含数字的两列数据框,我需要按行而不是按列对数据框进行排序。到处都给出了如何按列对数据框进行排序,但我无处可找到如何对 pyspark 中的所有数据框行进行排序

col1    col2

2        1

3        2

预期输出

col1   col2

1       2

2       3

【问题讨论】:

  • 您可能需要提供样本数据以及所需的结果。这个link 将帮助您更新/完善您的问题。

标签: pyspark


【解决方案1】:

您可能需要一些解决方法来产生您想要的结果。

这是一个基于行对数据进行排序的示例。

从您的数据框中,您可能需要先创建一个索引。

df = spark.createDataFrame([['index1',3,2,1], ['index2',2,1,3]], ['index', 'a', 'b', 'c']) 
columns = [i for i in df.columns if i != 'index'] 
df.show()

def sort_row_df(row_to_sort):
    row_data = df.filter(col('index')==row_to_sort).collect()[0] 

    sorted_row = sorted([[row_data[col_], col_] for col_ in columns])

    rearrange_col = [i[1] for i in sorted_row]

    return df.select("index", *rearrange_col)   

假设您希望根据行 'index1' 进行排序,

row_to_sort = 'index1'
sorted_df = sort_row_df(row_to_sort)
sorted_df.show()

根据行'index2'进行排序,

row_to_sort = 'index2'
sorted_df = sort_row_df(row_to_sort)
sorted_df.show()

如果您想根据行对所有数据进行排序,我建议您只需转置所有数据,对其进行排序,然后再将其转回。你可以参考how to transpose df in pyspark.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2019-10-12
    相关资源
    最近更新 更多