Ошибка выброса опережающих / запаздывающих функций при использовании в окне с ограниченным числом строк в Spark Scala - PullRequest
0 голосов
/ 15 января 2020

Фрагмент моего кода:

val scoreDateByAccount = Window
      .partitionBy($"partition_column")
      .orderBy($"ordering_column")
      .rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)

dataFrame
  .withColumn("new_column", lead($"ordering_column", 1).over(scoreDateByAccount))

Это выдает мне ошибку:

Указан фрейм окна. обязательный кадр указан в windowframe (RowFrame, 1, 1);

Если я затем удаляю часть rowsBetween моего фрагмента, ошибки не возникает. Если я выберу любую другую функцию, кроме lead / lag, кажется, что все работает отлично. Мне нужно указать диапазон окна, потому что я намерен использовать то же самое окно для генерации других столбцов (здесь опущено - считается неуместным), и, согласно этому ответу , среди прочего, если я этого не сделаю укажите предел строк, по умолчанию он будет rowsBetween(Window.unboundedPreceding, Window.currentRow, что для меня неприемлемо.

Я также обнаружил отчет об ошибке на Jira Spark, примерно за 3 года до go, утверждая, что функция lag была нарушена (хотя функция lead работала должным образом для OP), и сгенерированная ошибка была очень похожа на мою, но, тем не менее, помечена как Resolved.

Я также не могу найти документацию о том, какой windows может применяться lead / lag.

Что мне здесь не хватает?

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