Ich bin neu mit Funken arbeiten. Ich möchte eine große Anzahl von Spalten eines Spark-Datenrahmens mit Werten in einem Vektor multiplizieren. Bisher habe ich bei mtcars eine for-Schleife und muate_at wie folgt verwendet:Kann man mehrere Spalten von Funken DF mit einem Vektor modifizieren?
library(dplyr)
library(rlang)
library(sparklyr)
sc1 <- spark_connect(master = "local")
mtcars_sp = sdf_copy_to(sc1, mtcars, overwrite = TRUE)
mtcars_cols = colnames(mtcars_sp)
mtc_factors = 0:10/10
# mutate 1 col at a time
for (i in 1:length(mtcars_cols)) {
# set equation and print - use sym() convert a string
mtcars_eq = quo(UQ(sym(mtcars_cols[i])) * mtc_factors[i])
# mutate formula - LHS resolves to a string, RHS a quosure
mtcars_sp = mtcars_sp %>%
mutate(!!mtcars_cols[i] := !!mtcars_eq)
}
dbplyr::sql_render(mtcars_sp)
mtcars_sp
Das funktioniert ok mit mtcars. Dies führt jedoch dazu, dass verschachtelte SQL-Abfragen an den Funke gesendet werden, wie in sql_render gezeigt, und mit vielen Spalten zusammenfällt. Kann in diesem Fall statt einer einzigen SQL-Abfrage dplyr verwendet werden?
BTW, ich würde lieber nicht die Daten transponieren, da es zu teuer wäre. Jede Hilfe würde sehr geschätzt werden!
Danke dafür! Ich benutze die MLlib Algorithmen für jetzt nicht, also ist der erste Ansatz für mich perfekt. – swany