Apache Spark 2.0: строка-выражение для столбца orderBy () / sort () в порядке убывания - PullRequest
0 голосов
/ 14 декабря 2018

Я смотрю на пример книги, похожий на следующий (практически идентичный):

>>> from pyspark.sql import functions as sFn
>>>   # Note: I import Spark functions this way to avoid name collisions w/ Python.
>>>   # Usage below: sFn.expr(), sFn.col(), etc.

>>> col0 = [0, 1, 2, 3]
>>> col1 = [4, 5, 6, 7]

>>> myDF = spark.createDataFrame(zip(col0, col1),
                                 schema=['col0', 'col1'])
>>> print(myDF)
>>> myDF.show()
>>> myDF.orderBy(sFn.expr('col0 desc')).show() # <--- Problem line. Doesn't descend.

Теперь в примере книги утверждается, что последний оператор упорядочится на col0 в порядке убывания, но этоне:

DataFrame[col0: bigint, col1: bigint]

+----+----+
|col0|col1|
+----+----+
|   0|   4|
|   1|   5|
|   2|   6|
|   3|   7|
+----+----+

+----+----+
|col0|col1|
+----+----+
|   0|   4|
|   1|   5|
|   2|   6|
|   3|   7|
+----+----+

Этот вариант синтаксиса, однако, всегда работал для меня:

myDF.orderBy(sFn.col("col0").desc()).show()

Является ли проблемный вариант выше опечатки или ошибок?И если это опечатка или опечатки, какой твик необходим, чтобы заставить его работать?

Спасибо.

1 Ответ

0 голосов
/ 14 декабря 2018

In sFn.expr('col0 desc'), desc переводится как псевдоним вместо order by modifier, как вы можете видеть, набрав его в консоли:

sFn.expr('col0 desc')
# Column<col0 AS `desc`>

И вот несколькодругие варианты, которые вы можете выбрать в зависимости от того, что вам нужно:

 myDF.orderBy('col0', ascending=0).show()
+----+----+
|col0|col1|
+----+----+
|   3|   7|
|   2|   6|
|   1|   5|
|   0|   4|
+----+----+


myDF.orderBy(sFn.desc('col0')).show()
+----+----+
|col0|col1|
+----+----+
|   3|   7|
|   2|   6|
|   1|   5|
|   0|   4|
+----+----+

myDF.orderBy(myDF.col0.desc()).show()
+----+----+
|col0|col1|
+----+----+
|   3|   7|
|   2|   6|
|   1|   5|
|   0|   4|
+----+----+
...