R-在Sparklyr中使用Spark_Apply将加权随机正常向量添加到多个DF列



我是Sparplyr的新手,我正在尝试将另一个向量加权的随机正常向量添加到Spark DF的大量列中。这是我尝试使用mtcars的示例。

library(sparklyr)
library(dplyr)
sc1 <- spark_connect(master = "local")
mtc_df = select(mtcars, vs:carb)
mtc_sdf = sdf_copy_to(sc1, mtc_df, name = "mtc_sdf", overwrite = TRUE)
tf_df <- function(df1){
    df1 %>%
        mutate_at(vars(am:carb), funs(. + vs * rnorm(32, 100, 1)))
}
tf_df(mtc_df) # works 
mtc_sdf %>%
    spark_apply(function(d) tf_df(d), memory = TRUE) # doesn't work

我有以下错误:

Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :
  cannot open file 'C:....filea54a7656c3_spark.log': Permission denied

我还试图在https://spark.rstudio.com/上调整示例,但有相同的错误。

mtc_sdf %>%
    spark_apply(function(data) {
        data[2:4] + data[1]*rnorm(32*3,100,1)
    })

任何帮助都将不胜感激。

我正在尝试添加由另一个矢量加权的随机正常向量到Spark DF

的大量列

我建议跳过spark_apply并使用Spark自己的randn(给出〜n(0,1)):

mtc_sdf %>% mutate_at(vars(am:carb), funs(. + vs * (randn() * 1 + 100)))
# Source:   lazy query [?? x 4]
# Database: spark_connection
      vs        am     gear      carb
   <dbl>     <dbl>    <dbl>     <dbl>
 1     0   1.00000   4.0000   4.00000
 2     0   1.00000   4.0000   4.00000
 3     1 101.36894 103.1954  98.80757
 4     1 100.79066 102.6765 100.91702
 5     0   0.00000   3.0000   2.00000
 6     1 100.07964 103.1568 100.54303
 7     0   0.00000   3.0000   4.00000
 8     1 101.90050 103.0402 101.46825
 9     1  99.63565 103.7781 101.65752
10     1  99.72587 102.3854 105.09205

关于您的代码:

  • 您遇到的问题看起来像权限问题。请确保Spark用户已获得所有必要的许可,并且winutilis已正确使用。
  • spark_apply使用的功能:

    将数据框分区转换为数据框架。

    因此您无法硬代码行。您应该使用rnorm(nrow(df1), 100, 1))

  • sparklyr似乎无法正确地序列化的函数,因此您可能必须将函数内联或包装在软件包中:

    mtc_sdf %>% 
      spark_apply(function(df) dplyr::mutate_at(
        df, dplyr::vars(am:carb), dplyr::funs(. + vs * rnorm(nrow(df), 100, 1))))
    
    # Source:   table<sparklyr_tmp_34ce7faa2d33> [?? x 4]
    # Database: spark_connection
          vs        am     gear      carb
       <dbl>     <dbl>    <dbl>     <dbl>
     1     0   1.00000   4.0000   4.00000
     2     0   1.00000   4.0000   4.00000
     3     1 100.59678 101.9111 100.99830
     4     1  98.87146 104.8058  99.20102
     5     0   0.00000   3.0000   2.00000
     6     1  99.38243 102.8664 100.37921
     7     0   0.00000   3.0000   4.00000
     8     1  98.99019 103.4996 101.69110
     9     1  99.33687 102.3849 103.38833
    10     1 100.02103 104.9381 102.07139
    # ... with more rows
    

    也请不要自动连接驱动程序的软件包,因此您必须手动执行或使用完全合格的名称进行参考库功能。

相关内容

  • 没有找到相关文章

最新更新