对于大型数据集,在SparkyR中复制_到的替代方法

对于大型数据集,在SparkyR中复制_到的替代方法,r,hive,apache-spark-sql,sparklyr,R,Hive,Apache Spark Sql,Sparklyr,我有下面的代码,它接受一个数据集,并使用一个包装器函数对其进行SQL转换,使用SparkyR调用spark SQL API。然后,我使用“invoke”(“createOrReplaceTempView”,“name”)将Spark环境中的表保存为Spark数据帧,以便在将来的函数调用中调用is。然后我使用dplyr代码“mutate”调用配置单元函数“regexp_replace”将字母转换为数字(0)。我需要他们再次调用SQL函数 然而,要做到这一点,我似乎必须使用Sparkyr的“copy

我有下面的代码,它接受一个数据集,并使用一个包装器函数对其进行SQL转换,使用SparkyR调用spark SQL API。然后,我使用“invoke”(“createOrReplaceTempView”,“name”)将Spark环境中的表保存为Spark数据帧,以便在将来的函数调用中调用is。然后我使用dplyr代码“mutate”调用配置单元函数“regexp_replace”将字母转换为数字(0)。我需要他们再次调用SQL函数

然而,要做到这一点,我似乎必须使用Sparkyr的“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")
sqlfunction%调用(“sql”,块)
} 
sqlfunction(sc,“从中选择*
测试“%”%>%调用(“createOrReplaceTempView”,
“名称4”)
姓名%
突变(col3=regexp_replace(col2,“^[A-Z]”,“0”))
复制到(sc,名称,覆盖=TRUE)
sqlfunction(sc,“从中选择*
测试“%”%>%调用(“createOrReplaceTempView”,
“名称5”)

最终如果你有一个reprex会有帮助,但是试试看

final <- names %>%
  spark_dataframe() %>%
  sqlfunction(sc, "SELECT * FROM test") %>%
  sdf_register("name5")
final%
spark_dataframe()%>%
sqlfunction(sc,“从测试中选择*)%>%
sdf_登记簿(“名称5”)

这正是我最终要做的事情,很好。sdf_register不是基本上创建了一个视图,并且没有将数据保存到磁盘或内存中吗?我这样问是因为我在做一个大的连接,注意到sdf_寄存器没有保留结果中的数据,我不得不等待连接重新运行。只是想学。