星火的最大值和最小值



我是Spark的新手,我对SparkSQL中的聚合函数MAXMIN有一些疑问

在SparkSQL中,当我使用MAX/MIN函数时,只返回MAX(value)/MIN(value)。但是,如果我还想要其他相应的列呢?

例如,给定一个包含列timevaluelabel的数据帧,我如何获得按label分组的MIN(Value)time

谢谢。

你需要

先做一个groupBy,然后join回原来的DataFrame。在 Scala 中,它看起来像这样:

df.join(
  df.groupBy($"label").agg(min($"value") as "min_value").withColumnRenamed("label", "min_label"), 
  $"min_label" === $"label" && $"min_value" === $"value"
).drop("min_label").drop("min_value").show

我不使用Python,但它看起来很接近上面。

您甚至可以一次性完成max()min()

df.join(
  df.groupBy($"label")
    .agg(min($"value") as "min_value", max($"value") as "max_value")
    .withColumnRenamed("label", "r_label"), 
  $"r_label" === $"label" && ($"min_value" === $"value" || $"max_value" === $"value")
).drop("r_label")

您可以使用 sortByKey(true) 按升序排序,然后应用操作 "take(1)" 来获取 Max。

并使用sortByKey(false)按降序排序,然后应用操作"take(1)"来获取最小值

如果你想使用 spark-sql 的方式,你可以按照 @maxymoo 解释的方法

相关内容

  • 没有找到相关文章

最新更新