dataframe.orderBy(rand)是否等于dataframe.withColumn(“ X”,rand).orderBy(“ X”)

时间:2019-02-07 04:43:40

标签: apache-spark apache-spark-sql

我知道rand()会产生一列具有随机值的列,而orderBy会接受一列以降序或升序排序。

看着dataframe.orderBy(rand)

即使orderBy尚未在dataframe上创建,我也感到困惑,dataframe.withColumn("X",rand).orderBy("X") 可以接受列和排序。

相比

dataframe("X")

其中dataframe.orderBy(rand)已经定义。

哪个使我想到两个问题。

  1. dataframe.withColumn("X",rand).orderBy("X").orderBy在排序方面是否相同?

  2. 是否有必要在使用capabilities.setCapability("noReset", false); 之前创建其他列以进行订购?

1 个答案:

答案 0 :(得分:1)

是的,两个变体都是等效的,这令人惊讶。 orderBy采用表达式或列名。这是第一个变体。如果您熟悉SQL,则

dataframe.withColumn("X",rand).orderBy("X")

等同于

SELECT * FROM (SELECT *, randr AS X FROM table) ORDER BY X

同时

dataframe.orderBy(rand)

等同于

SELECT * FROM table ORDER BY randr