У меня есть один фрейм данных scala-spark с тремя столбцами, скажем, Col1, Col2 и Col3.Этот фрейм данных имеет около 54 миллионов строк.
Мне нужно максимум Col3 на Col1, комбинацию Col2, как показано ниже
[
val maxDf = df.groupBy(Col1, Col2).agg(F.max(Col3))
[
Но когда я пытаюсь достичь выше, используя groupBy
, то как-то не получается с ошибкой ниже
java.lang.OutOfMemoryError: Unable to acquire 8168736160 bytes of memory, got 0
Затем я попробовал то же самое, используя оконную функцию
val window = Window.partitionBy("Col1","Col2")
val maxDf = df.withColumn("maxVal", F.max("Col3").over(window))
Каким-то образом приведенный выше код успешно выполнен.Я пытаюсь выяснить причину этого, поскольку теоретически обе операции похожи и имеют одинаковый план выполнения.