PySpark从多个列中选择前N个

时间:2019-07-08 17:24:16

标签: apache-spark pyspark

Pyspark数据框

Tick | Long Position  | Short Position
ADM  | $25.5          | $12.2
INT  | $300           | $120
CITI | $-12           | $9.1

我需要从“好仓”和“空仓”中选择前三名。从上面我想要的数据来看,将会像下面这样。怎么做?

Tick | Position | PnL
INT  | Long     | $300
INT  | Short    | $120
ADM  | Long     | $25.5

1 个答案:

答案 0 :(得分:1)

我的最初想法是将两列合并并在输出的结构中创建一个数据框,然后取前3位。我只是在Scala中尝试过,它也可以与pyspark一起使用。


val y = someDF.select("Tick", "Long").withColumn("type", lit("Long")).withColumnRenamed("Long", "PnL")
val z = someDF.select("Tick", "Short").withColumn("type", lit("Short")).withColumnRenamed("Short", "PnL")

println(y.union(z).sort(desc("PnL")).take(3))

由于您正在使用spark API进行所有操作,因此我认为它也应为您提供良好的性能。让我知道事情的后续!