Spark的最大值和最小值

时间:2016-03-17 03:02:32

标签: apache-spark pyspark apache-spark-sql pyspark-sql

我是Spark的新手,我对SparkSQL中的聚合函数for iii = 0 to Power(M, N) - 1 Clear Collections i = iii //number of combination for k = 0 to N - 1 do j = i mod M //integer modulo, % //gives k-th digit of number i in M-radix representation //counting from right to left Collections[j].Add(Object[k]) i = i div M //integer division output Collections MAX有一些疑问

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

例如给定包含MIN(value)timevalue列的数据框,如何将labeltimeMIN(Value)分组?

感谢。

2 个答案:

答案 0 :(得分:1)

您需要先执行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")

答案 1 :(得分:-1)

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

并使用sortByKey(false)按降序排序,然后应用操作“take(1)”获得Min

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