PySpark:以下两种在数据框中使用 desc 函数有啥区别?

Posted

技术标签:

【中文标题】PySpark:以下两种在数据框中使用 desc 函数有啥区别?【英文标题】:PySpark : What is difference between below two use of desc function in dataframe?PySpark:以下两种在数据框中使用 desc 函数有什么区别? 【发布时间】:2020-06-12 10:27:07 【问题描述】:

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 函数?是否有任何支持文档或解释来澄清这种混淆(我没有找到任何)???

提前致谢。

【问题讨论】:

【参考方案1】:

两者都是一样的。 根据文档和源代码 (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 所以两者都是相同的(将它们作为执行相同操作的 2 个替代方案)

【讨论】:

【参考方案2】:

在多次阅读文档后,我现在明白了。pyspark.sql.* 模块中有两个 desc() 可用。一个在 pyspark.sql.functions 模块 (here) 中。 此方法采用强制列参数。 第二个在pyspark.sql.Column 类(here)内。这个不带任何参数。

两种实现方式几乎相同。但实现方式不同,可以与正确的 import 语句互换使用。

【讨论】:

以上是关于PySpark:以下两种在数据框中使用 desc 函数有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问pyspark数据框中的动态列

如何使用 pyspark 2.1.0 选择另一个数据框中不存在的行?

Pyspark 在数据框中合并 WrappedArrays

Pyspark:迭代数据框中的组

如何使用pyspark将具有多个可能值的Json数组列表转换为数据框中的列

pySpark 数据框中的累积积