max () с struct () в наборе данных Spark - PullRequest
0 голосов
/ 05 октября 2018

У меня есть что-то вроде приведенного ниже в искре, из которого я группирую, а затем пытаюсь найти тот, который имеет наибольшее значение из моей структуры.

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, используя num1 вместо следующих чисел, когда все было в одной структуре.

1 Ответ

0 голосов
/ 05 октября 2018

StructTypes сравниваются лексикографически - поле за полем, слева направо, и все поля должны быть рекурсивно упорядочены.Итак, в вашем случае:

  1. Он будет сравнивать первый элемент структуры.

    • Если элементы не равны, он вернет структуру с более высоким значением.
    • В противном случае он перейдет к точке 2.
  2. Поскольку второе поле также является сложным, оно будет повторять процедуру с точки 1 на этот раз, сравниваяtime поля вначале.

Обратите внимание, что вложенные num1 могут оцениваться, если поля верхнего уровня num1 равны, поэтому на практике это не влияет на порядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...