You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PySpark中df.selectExpr("distinct(DEST_COUNTRY_NAME)")无法运行?

问题根源

Spark SQL里不存在distinct()这种单参数函数,distinct是行级去重的关键字,并非可直接调用的函数。而count(distinct 列名)是聚合函数count的特殊用法,和单独使用distinct的逻辑完全不同,因此不会触发报错。

解决办法

除了你已经验证通过的两种写法,还可以用这些等价方式实现获取单列唯一值:

  • 用dropDuplicates替代distinct,效果完全一致:
    unique_values_df = df.select("DEST_COUNTRY_NAME").dropDuplicates()
    
  • 如果一定要结合selectExpr使用,可采用如下语法(本质和你已用的第二种写法逻辑一致):
    unique_values_df = df.selectExpr("DEST_COUNTRY_NAME").distinct()
    
语法差异说明
  • df.select("DEST_COUNTRY_NAME").distinct():先选中目标列,再对整列的行做去重处理,返回包含所有唯一值的数据集
  • df.selectExpr("count(distinct(DEST_COUNTRY_NAME))"):属于聚合统计操作,计算该列唯一值的总数量,返回的是单个统计数值而非唯一值列表
  • 核心误区:误将distinct当成普通函数调用,Spark SQL中不存在distinct(列名)这种语法,这是触发报错的直接原因

内容的提问来源于stack exchange,提问作者Heejun Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:42:08