用于在sparklyr中提取列名的简单命令(R + spark)

时间:2016-10-11 13:56:00

标签: r apache-spark dplyr sparklyr

在基数r中,很容易从数据框中提取列(变量)的名称

-fno-elide-constructors

但是在使用sparklyr时,事情变得更加复杂。将数据框复制到spark后,

> testdf <- data.frame(a1 = rnorm(1e5), a2 = rnorm(1e5), a3 = rnorm(1e5), a4 = rnorm(1e5), a5 = rnorm(1e5), a6 = rnorm(1e5))  
> names(testdf)  
[1] "a1" "a2" "a3" "a4" "a5" "a6"

变量名实际上位于&#39; ops&#39;

> testdf_tbl <- copy_to(sc, testdf, overwrite = TRUE)  
> names(testdf_tbl)  
[1] "src" "ops"

如果这一切都没有问题(也没有必要问这个问题)。但是,每次在testdf_tbl上发生操作时,列/变量的名称都会改变它们的位置,如下所示。

> testdf_tbl$ops$vars  
[1] "a1" "a2" "a3" "a4" "a5" "a6"

另一个操作会在路径上添加另一个$ x,依此类推。

> testdf_tbl <- testdf_tbl %>% select(-a1)  
> testdf_tbl$ops$vars  
NULL  
> testdf_tbl$ops$x$vars  
[1] "a1" "a2" "a3" "a4" "a5" "a6"  

更糟糕的是,变量列表并不反映我们所做的选择操作,它们仍然将a1,a2列为列名。在哪里,

> testdf_tbl <- testdf_tbl %>% select(-a2)  
> testdf_tbl$ops$x$vars  
NULL  
> testdf_tbl$ops$x$x$vars  
[1] "a1" "a2" "a3" "a4" "a5" "a6"  

如此清楚,选择操作产生的影响是如何使用spark数据帧。

SURELY,有一种简单,直接的方法来提取sparklyr中的变量/列的当前名称,基础r中的la > head(testdf_tbl) Source: query [?? x 4] Database: spark connection master=local[24] app=sparklyr local=TRUE a3 a4 a5 a6 dbl dbl dbl dbl 1 -1.146368875 1.691698406 0.43231629 1.3349111 2 0.664928710 -1.332242020 0.05380729 1.0139253 3 1.158095695 -0.097098980 -0.61885204 0.1504693 4 0.001595841 -0.003765908 0.27935192 -0.3039085 5 -0.133446040 0.269329076 1.57210274 1.7762602 6 0.006468698 -1.300439537 0.74057307 0.1320428

1 个答案:

答案 0 :(得分:2)

正如凯文所说,tbl_vars有效,但如果你想让它更多&#34; base-R&#34;比如,colnames也可以。