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 2.1.0 选择另一个数据框中不存在的行?