Давайте начнем с вашей первой проблемы:
Получить максимальное значение просто.
Это действительно так, однако spark_apply
это просто не выходидти.Вместо этого лучше использовать функцию greatest
:
sdf %>% mutate(max = greatest(V1, V2, V3))
Эта же функция может быть использована для решения второй проблемы, однако из-за ограничений sparklyr
вам придется использовать выражение SQL напрямую:
expr <- c("V1", "V2", "V3") %>%
paste0(
"CAST(STRUCT(`",
., "`, ", seq_along(.),
") AS struct<value: double, index: double>)", collapse=", ") %>%
paste0("greatest(", ., ").index AS max_index")
sdf %>%
spark_dataframe() %>%
invoke("selectExpr", list("*", expr)) %>%
sdf_register()
В Spark 2.4 (как сейчас не поддерживается в sparklyr
), может быть возможно до
sdf %>% mutate(max
max_index = array_max(arrays_zip(array(V1, V2, V3), array(1, 2, 3))).1
)