我正在Windows 10的RStudio中以本地模式运行sparklyr
:
spark_version <- "2.1.0"
sc <- spark_connect(master = "local", version = spark_version)
df <- data.frame(id = c(1, 1, 2, 2), county_code = c(1, 20, 321, 2))
sprintf("%03d",as.numeric(df$county_code))
df_tbl = copy_to(sc,df, "df_tbl", overwrite = TRUE)
df_tbl %>% summarise(sum = sum(county_code)) %>% collect() ## this works
## this does not:
df_tbl %>%
spark_apply(function(e) data.frame(sprintf("%03d",as.numeric(e$county_code), e),
names = c('county_code_fips', colnames(e))))
最后一行返回以下错误:
Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") :
cannot open file 'C:\Users\janni\AppData\Local\Temp\RtmpELRVxu\file4ab817055ccc_spark.log': Permission denied
在笔记本电脑和台式机上都会发生这种情况。我尝试以管理员身份运行RStudio,但不会进行任何更改。
答案 0 :(得分:1)
问题似乎出在为names
指定的spark_apply
的方式上。
一种选择是不用names
参数就可以做到这一点。
df_tbl %>%
spark_apply(function(e) data.frame(county_code_fips =
sprintf("%03d",as.numeric(e$county_code)), e))
## Source: spark<?> [?? x 3]
# county_code_fips id county_code
# <chr> <dbl> <dbl>
#1 001 1 1
#2 020 1 20
#3 321 2 321
#4 002 2 2
由于names
不能访问e
内部函数中的spark_apply
,因此必须使用tbl中的名称。
df_tbl %>%
spark_apply(function(e)
data.frame(sprintf("%03d",as.numeric(e$county_code)), e),
names = c('county_code_fips', colnames(df_tbl)))
## Source: spark<?> [?? x 3]
# county_code_fips id county_code
# <chr> <dbl> <dbl>
#1 001 1 1
#2 020 1 20
#3 321 2 321
#4 002 2 2