Использование spark_apply в sparklyr для добавления взвешенных случайных векторов нормалей к нескольким столбцам DF

Я новичок в sparklyr и пытаюсь добавить случайные векторы нормалей, взвешенные другим вектором, к большому количеству столбцов 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)
    })

Любая помощь приветствуется.


person swany    schedule 07.12.2017    source источник
comment
Можете ли вы попробовать дать полные права (или записи) для каталога журналов? Это позволит вам использовать журналы и определить проблему.   -  person Satish Gadhave    schedule 07.12.2017
comment
Спасибо за ответ. Как мне изменить права доступа к журналу в R — я еще этого не делал? Что вы подразумеваете под «добавить против»?   -  person swany    schedule 07.12.2017
comment
Можете ли вы запустить от имени администратора или root, чтобы увидеть, имеет ли это какое-либо отношение к этому?   -  person JMA    schedule 07.12.2017


Ответы (1)


Я пытаюсь добавить случайные векторы нормалей, взвешенные другим вектором, к большому количеству столбцов искры df

Я бы рекомендовал пропустить spark_apply и использовать собственный randn Spark (что дает ~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 используются правильно.
  • #P4# <блочная цитата> #P5# #P6#
  • 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
    

    Также обратите внимание на то, что пакеты из драйвера не подключаются автоматически, поэтому вам придется делать это вручную или ссылаться на библиотечные функции, используя полные имена.

person zero323    schedule 07.12.2017
comment
Это работает, отлично! Встраивание функции и явная ссылка на dplyr изменили ситуацию. Кроме того, вы правы, что randn() лучше. Работает в разы быстрее. Я думаю, что моя ошибка разрешений является проблемой для отладки, а не для запуска искры. Спасибо большое! - person swany; 08.12.2017