Spark Dataset中的max()与struct()

时间:2018-10-05 14:47:09

标签: scala apache-spark apache-spark-sql

我正在整理类似下面的内容,然后尝试从我的结构中找到具有最高价值的内容。

test.map(x => tester(x._1, x._2, x._3, x._4, x._5))
  .toDS
  .select($"ac", $"sk", struct($"num1", struct($"time", $"num1")).as("grp"))
  .groupBy($"ac", $"sk")
  .agg(max($"grp")).show(false)

我不确定max函数如何找出如何确定max。我使用嵌套结构的原因是因为当所有内容都在同一结构中时,它似乎使用num1而不是下一个数字来实现max函数。

1 个答案:

答案 0 :(得分:1)

按字典顺序对StructTypes进行比较-从左到右逐字段进行比较,所有字段都必须递归排序。因此,在您的情况下:

  1. 它将比较该结构的第一个元素。

    • 如果元素不相等,它将返回具有更高值的结构。
    • 否则,它将前进到第2点。
  2. 由于第二个字段也很复杂,因此它将再次从点1开始重复此过程,首先比较time个字段。

请注意,如果顶级num1字段相等,则可以评估嵌套的num1,因此在实践中不会影响排序。