Да, это безопасно.
Глядя на исходный код главной ветки для объекта Window
на github , есть следующее примечание (его нет в ветке 2.3.0):
Когда порядок не определен, по умолчанию используется неограниченная оконная рама (rowFrame, unboundedPreceding, unboundedFollowing).Когда порядок определен, по умолчанию используется растущая оконная рама (rangeFrame, unboundedPreceding, currentRow).
Другими словами, когда в окне есть порядок, то есть с помощью orderBy
,неопределенная граница на кадре равна:
rowsBetween(Window.unboundedPreceding, Window.currentRow)
В случае, если orderBy
не используется, по умолчанию используется любое неограниченное окно:
rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)
Дальнейшие исследования показывают, что эти значения по умолчанию использовались, так как оконные функции были введены в Spark 1.4.0, относящихся к github branch :
def defaultWindowFrame(
hasOrderSpecification: Boolean,
acceptWindowFrame: Boolean): SpecifiedWindowFrame = {
if (hasOrderSpecification && acceptWindowFrame) {
// If order spec is defined and the window function supports user specified window frames,
// the default frame is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
SpecifiedWindowFrame(RangeFrame, UnboundedPreceding, CurrentRow)
} else {
// Otherwise, the default frame is
// ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.
SpecifiedWindowFrame(RowFrame, UnboundedPreceding, UnboundedFollowing)
}
}