2016-10-11 14 views
4

В базовом г, легко извлекать имена столбцов (переменные) из кадра данныхПростая команды для извлечения имен столбцов в sparklyr (R + искры)

> 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" 

, но при использовании sparklyr, вещи становятся более сложным. После копирования кадра данных СПАРК,

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

имен переменных на самом деле находятся глубоко внутри «OPS»

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

и если бы это было все, что не будет никаких проблем (и не нужно спрашивать об этом вопрос). Но, каждый раз, когда операция происходит на testdf_tbl, имена столбцов/переменных изменяют свое положение, как показано ниже ..

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

другая операция добавляет еще $ х на путь .. и так далее.

> 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" 

В довершение, список переменных не отражает выбирать операции, которые мы сделали, они до сих пор список a1, a2, как имена столбцов. где, как,

> 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 

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

SURELY, существует простой, простой способ извлечения текущих имен переменных/столбцов в sparklyr, a la names() в базе r.

+0

Добро пожаловать в StackOverflow. Пожалуйста, посмотрите на [руководство по форматированию] (http://stackoverflow.com/help/formatting) –

+1

спасибо большое! это намного лучше. – Prasanna

+2

Здесь вы можете использовать 'dplyr :: tbl_vars()'. Поскольку «sparklyr» реализует соединение Spark с интерфейсом «dplyr», подпрограммы, предоставляемые 'dplyr' для этих операций, должны работать так, как вы ожидаете. https://cran.rstudio.com/web/packages/dplyr/vignettes/databases.html также может быть полезно. –

ответ

2

Как сказал Кевин, tbl_vars работает, но если вы хотите, чтобы это было больше «base-R», как, colnames также делает это.