diff --git a/R/pkg/R/functions.R b/R/pkg/R/functions.R index ff20c9696099c..3ee1cd5b50b48 100644 --- a/R/pkg/R/functions.R +++ b/R/pkg/R/functions.R @@ -3670,7 +3670,12 @@ unresolved_named_lambda_var <- function(...) { "org.apache.spark.sql.Column", newJObject( "org.apache.spark.sql.catalyst.expressions.UnresolvedNamedLambdaVariable", - list(...) + lapply(list(...), function(x) { + handledCallJStatic( + "org.apache.spark.sql.catalyst.expressions.UnresolvedNamedLambdaVariable", + "freshVarName", + x) + }) ) ) column(jc) diff --git a/R/pkg/tests/fulltests/test_sparkSQL.R b/R/pkg/tests/fulltests/test_sparkSQL.R index 4a4b7ac66ef4b..30daa2064355d 100644 --- a/R/pkg/tests/fulltests/test_sparkSQL.R +++ b/R/pkg/tests/fulltests/test_sparkSQL.R @@ -2161,6 +2161,20 @@ test_that("higher order functions", { expect_error(array_transform("xs", function(...) 42)) }) +test_that("SPARK-34794: lambda vars must be resolved properly in nested higher order functions", { + df <- sql("SELECT array(1, 2, 3) as numbers, array('a', 'b', 'c') as letters") + ret <- first(select( + df, + array_transform("numbers", function(number) { + array_transform("letters", function(latter) { + struct(alias(number, "n"), alias(latter, "l")) + }) + }) + )) + + expect_equal(1, ret[[1]][[1]][[1]][[1]]$n) +}) + test_that("group by, agg functions", { df <- read.json(jsonPath) df1 <- agg(df, name = "max", age = "sum")