Как сгенерировать агрегацию длинных выражений набора данных Spark в цикле?

К сожалению, ни ответы TheJacobTaylor, ни ответы velcro не дают точных результатов для текущих версий MySQL.

Ответ на Velcro сверху близок, но он не вычисляет правильно для наборов результатов с четным числом строк. Медианы определяются как 1) среднее число на нечетных нумерационных множествах, или 2) среднее из двух средних чисел на четных наборах чисел.

Итак, вот решение velcro, исправленное для обработки как нечетного, так и четного числа sets:

SELECT AVG(middle_values) AS 'median' FROM (
  SELECT t1.median_column AS 'middle_values' FROM
    (
      SELECT @row:=@row+1 as `row`, x.median_column
      FROM median_table AS x, (SELECT @row:=0) AS r
      WHERE 1
      -- put some where clause here
      ORDER BY x.median_column
    ) AS t1,
    (
      SELECT COUNT(*) as 'count'
      FROM median_table x
      WHERE 1
      -- put same where clause here
    ) AS t2
    -- the following condition will return 1 record for odd number sets, or 2 records for even number sets.
    WHERE t1.row >= t2.count/2 and t1.row <= ((t2.count/2) +1)) AS t3;

Чтобы использовать это, выполните следующие 3 простых шага:

  1. Замените «median_table» (2 вхождения) в приведенном выше коде с именем вашей таблицы
  2. Замените «median_column» (3 вхождения) на имя столбца, которое вы хотите найти для медиана для
  3. . Если у вас есть условие WHERE, замените «WHERE 1» (2 вхождения ) с вашим условием
0
задан BerSerK 19 March 2019 в 11:18
поделиться

1 ответ

Вы можете:

  1. Создать свой фрейм данных (набор данных - это фрейм данных, в противоположность набору данных чего-либо еще) со всеми дополнительными столбцами до, а затем выполнить агрегирование на вновь созданные столбцы. Вы можете создать столбцы в цикле.

  2. Создайте UDAF (пользовательскую функцию агрегирования), которая будет обрабатывать ваш пользовательский код на Java.

Надеюсь, это поможет ...

0
ответ дан jgp 19 March 2019 в 11:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: