【问题标题】:spark_apply error specifying column namesspark_apply 错误指定列名
【发布时间】:2019-10-21 08:21:17
【问题描述】:

我在 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,但它不会改变任何东西。

【问题讨论】:

    标签: r sparklyr


    【解决方案1】:

    看来问题出在namesspark_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 无法访问spark_apply 内部函数中的e,因此您必须使用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
    

    【讨论】:

    • 谢谢!我最初试图了解您想要的输出是什么,然后看到您的代码有什么问题。 data.frame 没有 names 参数。 spark_apply 有一个,但是e 的范围没有扩展到它,所以你必须使用colnames (df_tbl)。希望对您有所帮助。
    猜你喜欢
    • 2018-03-30
    • 2016-07-05
    • 2018-04-20
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    相关资源
    最近更新 更多