【问题标题】:Group by plus count() not working correctly按加计数()分组无法正常工作
【发布时间】:2022-10-25 11:15:43
【问题描述】:

我正在使用 pyspark 上的数据框,我正在尝试添加一个新列,其中包含 this post 中的不同记录的计数。这是我正在使用的代码:

import pyspark.sql.functions as func
df= df.groupBy('CUSTOMER').count().select('CUSTOMER', func.col('count').alias('COUNT'))

它适用于大约 180k 记录,但有一些记录我得到这样的东西:

CUSTOMER COUNT
123456 50
123456 50

而不是像这样的东西,这是我所期望的:

CUSTOMER COUNT
123456 100

我注意到 hive 上 CUSTOMER 的数据类型(因为稍后将数据框写入数据库)是 decimal(12,0) 所以我认为可能有些记录有 CUSTOMER = 123456 和其他的 CUSTOMER=123456.0 不知何故这是不同的所以我去修改了创建数据框的查询(来自另一个配置单元数据库)以在选择语句上使用CAST(CUSTOMER AS INT) AS CUSTOMER,但我仍然得到相同的结果。

关于还有什么可能导致此问题或我还可以检查什么的任何想法?

提前致谢。

【问题讨论】:

  • df.printSchema() 显示什么?
  • 你也可以分享你的查询,也许是样本数据
  • 使用F.trim("CUSTOMER")。例如。 df = df.groupBy(F.trim("CUSTOMER")).agg(F.count(F.lit(1)).alias('COUNT'))

标签: python pyspark apache-spark-sql hive


【解决方案1】:

这通常是由white-space characters引起的,你可以查看你的customer字段来验证这个想法。

使用F.trim("CUSTOMER").E.g.df = df.groupBy(F.trim("CUSTOMER")).agg(F.count(F.lit(1)).alias('COUNT'))

这似乎是一个很好的答案,因为它写在@zygd 上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2018-12-02
    • 1970-01-01
    • 2013-01-30
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多