首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何得到每种产品的最小库存和最大库存之间的差额?

如何得到每种产品的最小库存和最大库存之间的差额?
EN

Stack Overflow用户
提问于 2017-11-20 09:58:52
回答 1查看 2K关注 0票数 1

我想得到每个产品的最大库存和最小库存,并计算这些值之间的差异。如果股票等于null或为空,则应将其替换为0。

这是我的密码:

代码语言:javascript
复制
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions._

val windowSpec = Window.partitionBy("product_pk")
val sales = df
             .select($"product_pk",$"stock")
             .withColumn("sold",max($"stock")-min($"stock").over(windowSpec))

但是当我运行我的代码时,我会得到这个错误。我不明白为什么不能将Windowproduct_pk结合使用。

诊断: User类抛出异常: org.apache.spark.sql.AnalysisException:分组表达式序列为空,“mytable.product_pk”不是聚合函数。在窗口函数中将'(max(mytable.stock)包装为_w0‘),或者在first() (或first_value)中包装'mytable.product_pk’,如果您不关心得到哪个值。

还是我应该使用groupBy product_pk?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-20 10:21:47

当前,您在错误的上下文中使用max (未指定窗口),请尝试:

代码语言:javascript
复制
val sales = df
  .select($"product_pk",$"stock")
  .withColumn("sold",max($"stock").over(windowSpec)-min($"stock").over(windowSpec))

您还可以使用groupBy:

代码语言:javascript
复制
val sales = df
  .groupBy($"product_pk",$"stock")
    .agg(
      max($"stock").as("max_stock"),
      min($"stock").as("min_stock")
    )
  .withColumn("sold",coalesce($"max_stock"-$"min_stock",lit(0.0)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47389301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档