2016-08-12 3 views
1

Привет Я пытаюсь перенести код из pyspark в sparkR. Чтобы изменить некоторые столбцы, я использовал'withColumn 'в pyspark. Однако в sparkR он генерирует новый столбец. Затем я попытался что-то вродеНазначить колонку в sparkR

df$a <- f(df$a) 

Это хорошо и хорошо. Однако предположим, что я хочу использовать это внутри функции или для цикла и повторять ее для ряда переменных. В этом случае, к сожалению, не работает:

df[['a']] <- f(df[['a']]) 

Я понял, что это делает работу при выполнении следующих действий:

df$a <- f(df[['a']]) 

Я определенно нужно Ассинг используя либо '[[< -' или каким-либо другим способом. Идеи?

ответ

0

С колонкой должен хорошо работать в Спарке 2.0.0+

library(magrittr) 

df <- createDataFrame(iris) 
df %>% withColumn("Sepal_Length", lit(1)) %>% columns 
## [1] "Sepal_Length" "Sepal_Width" "Petal_Length" "Petal_Width" "Species" 

, но если вы работаете с более ранней версией вы всегда можете использовать $<- как функция:

df <- createDataFrame(sqlContext, iris) 

df %>% `$<-`("Sepal_Length", lit(1)) %>% columns 
## [1] "Sepal_Length" "Sepal_Width" "Petal_Length" "Petal_Width" "Species" 

df %>% `$<-`("Sepal_Length", lit(1)) %>% head 
## Sepal_Length Sepal_Width Petal_Length Petal_Width Species 
## 1   1   3.5   1.4   0.2 setosa 
## 2   1   3.0   1.4   0.2 setosa 
## 3   1   3.2   1.3   0.2 setosa 
## 4   1   3.1   1.5   0.2 setosa 
## 5   1   3.6   1.4   0.2 setosa 
## 6   1   3.9   1.7   0.4 setosa 

Так все, что вам нужно для обеспечения его работы с переменной является do.call:

x <- "Sepal_Length" 

do.call(`$<-`, list(df, x, lit(1))) %>% columns 
+0

Привет, это работает как есть. Однако, если вы попытаетесь поместить выражение внутри цикла или функции for, вместо переменной «Sepal_Length» вместо переменной, она будет интерпретировать эту переменную как имя, а не строку. Я попытался использовать NSE, чтобы решить это, но я не эксперт, и это сложно. Я не отмечаю это как ответ, поскольку он не решает основной проблемы - возможность использовать выражение внутри функции. Спасибо, в любом случае. –

Смежные вопросы