对于大型数据集,在sparklyr中复制\u到的替代方法

ecbunoof  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(309)

我有下面的代码,它使用sparkyr调用sparksqlapi的 Package 函数对数据集进行sql转换。然后使用“invoke(“createorreplacetempview”,“name”)”将spark环境中的表保存为sparkDataframe,以便在将来的函数调用中调用is。然后我使用dplyr代码“mutate”调用配置单元函数“regexp\u replace”将字母转换为数字(0)。我需要他们再次调用sql函数。
然而要做到这一点,我似乎必须使用sparklyr的“copy\u to”函数。在大数据集上,“copy\u 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”的方法可以让我得到一个sparkDataframe,然后用sqlapi调用它?
这是我的密码

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")
13z8s7eq

13z8s7eq1#

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

final <- names %>%
  spark_dataframe() %>%
  sqlfunction(sc, "SELECT * FROM test") %>%
  sdf_register("name5")

相关问题