我正在尝试将代码从PySpark迁移到SparkR。为了修改一些列,我在PySpark中使用了' withColumn '。但是,在SparkR中,它生成一个新列。然后我试着输入
df$a <- f(df$a)
那很好。但是,假设我想在函数或for循环中使用它,并对许多变量重复使用它。在这种情况下,很遗憾它不起作用:
df[['a']] <- f(df[['a']])
我意识到在做以下事情时可以工作:
df$a <- f(df[['a']])
我肯定需要通过使用[[<-
或其他方式。想法吗?
With column应该在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