我有以下代码,它将数据集输入一个包装函数进行SQL转换,使用Sparklyr调用Spark SQL API。然后我使用“invoke(“createOrReplaceTempView”,“name”)”将表保存在Spark环境中作为Spark数据帧,以便我可以在将来的函数调用中呼叫它。然后我使用dplyr代码“mutate”来调用一个hive函数“regexp_replace”将字母转换为数字(0)。然后我需要再次调用SQL函数。
有没有替代“copy_to”的方式让我得到一个Spark数据框,然后可以使用SQL API进行调用?
以下是我的代码:
但是为了这样做,似乎我必须使用sparklyr中的“copy_to”函数。在大型数据集上, “copy_to”函数会引发以下错误:
Error: org.apache.spark.SparkException: Job aborted due to stage
failure: Total size of serialized results of 6 tasks (1024.6 MB) is
bigger than spark.driver.maxResultSize (1024.0 MB)
有没有替代“copy_to”的方式让我得到一个Spark数据框,然后可以使用SQL API进行调用?
以下是我的代码:
sqlfunction <- function(sc, block) {
spark_session(sc) %>% invoke("sql", block)
}
sqlfunction(sc, "SELECT * FROM
test")%>%invoke("createOrReplaceTempView",
"name4")
names<-tbl(sc, "name4")%>%
mutate(col3 = regexp_replace(col2, "^[A-Z]", "0"))
copy_to(sc, names, overwrite = TRUE)
sqlfunction(sc, "SELECT * FROM
test")%>%invoke("createOrReplaceTempView",
"name5")
final<-tbl(sc, "name5")