1
我有下面的代码需要一个数据集使用包装函数对它进行SQL转换,该函数使用Sparklyr调用spark API。然后,我使用“invoke(”createOrReplaceTempView“,”name“)”将表格作为Spark数据框保存在Spark环境中,以便我可以调用该函数以进行未来的函数调用。然后我使用dplyr代码“mutate”来调用配置单元函数“regexp_replace”将字母转换为数字(0)。我需要再次调用SQL函数。替代copy_to在sparklyr中处理大型数据集
不过要做到这一点,我似乎必须使用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”,让我得到一个火花数据帧,我可以再与SQL API调用?
这里是我的CODEL
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")
这正是我终于实现了,这是很好。 –
不会sdf_register基本上创建一个视图,并不会将数据保存到磁盘或内存?我问,因为我正在做一个大连接,并且注意到sdf_register没有保留结果中的数据,我不得不等待连接重新运行。只是想学习。 – ansek