pyspark:下面两种在dataframe中使用desc函数有什么区别?

628mspwn  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(647)

两者有什么区别 empDF["Last Name"].desc() 以及 desc("Last Name") 因为两者都给出了相同的结果,都涉及到洗牌操作

>>> empDF.orderBy(empDF["Last Name"].desc()).show(4)
+------+----------+---------+------+------+
|Emp ID|First Name|Last Name|Gender|Salary|
+------+----------+---------+------+------+
|977421|   Zackary|  Zumwalt|     M|177521|
|741150|    Awilda|    Zuber|     F|144972|
|274620|  Eleanora|     Zook|     F|151026|
|242757|      Erin|     Zito|     F|127254|
+------+----------+---------+------+------+
only showing top 4 rows

>>> empDF.orderBy(desc("Last Name")).show(4)
+------+----------+---------+------+------+
|Emp ID|First Name|Last Name|Gender|Salary|
+------+----------+---------+------+------+
|977421|   Zackary|  Zumwalt|     M|177521|
|741150|    Awilda|    Zuber|     F|144972|
|274620|  Eleanora|     Zook|     F|151026|
|242757|      Erin|     Zito|     F|127254|
+------+----------+---------+------+------+
only showing top 4 rows

我注意到,在必须导入列名之前使用desc() from pyspark.sql.functions import desc . 像前者是spark dataframe列函数的一部分,而后者是spark sql函数吗???是否有任何支持文件或解释来澄清这一困惑(我没有发现任何)???
提前谢谢。

zd287kbt

zd287kbt1#

多次阅读文档后,我现在明白了。pyspark.sql.*模块中有两个desc()。一个在里面 pyspark.sql.functions 模块(此处)。此方法采用强制列参数。第二个在里面 pyspark.sql.Column 班级(这里)。这个不需要任何论证。
这两个实现做几乎相同的事情和相同的方式。但实现是不同的,可以与适当的import语句互换使用。

3phpmpom

3phpmpom2#

两者都是一回事。根据文档和源代码( funtions.desc.. )-

/**
   * Returns a sort expression based on the descending order of the column.
   * {{{
   *   df.sort(asc("dept"), desc("age"))
   * }}}
   *
   * @group sort_funcs
   * @since 1.3.0
   */
  def desc(columnName: String): Column = Column(columnName).desc

内部检查 desc(columnName) 呼叫 Column(columnName).desc 所以两者都是相同的(把这两个作为执行相同操作的两个备选方案)

相关问题