2016-08-12 15 views
1

こんにちは私はpysparkからsparkRへコードを移行しようとしています。いくつかの列を修正するために、私はpysparkで 'WithColumn'を使用しました。ただし、sparkRでは新しい列が生成されます。私はその後も良いですsparkRの列を割り当てます

df$a <- f(df$a) 

のようなものを試してみました。しかし、私はそれを関数やループの中で使い、いくつかの変数に対して繰り返したいとします。この場合、それは悲しげに動作しません。

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

私は、次の操作を実行したときに、それ作業を行い実現:

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

を、私は間違いなく[[< 'のいずれか使用してASSINGする必要があります-'または何か他の方法で。アイデア?コラムでは

答えて

0

は、Spark 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を使用しようとしましたが、私は専門家ではありませんし、扱いにくいです。私はこれを答えとしてマークしません。なぜなら、関数内で式を使用できるという主な問題を解決するものではないからです。とにかくありがとう。 –