r语言 - 在SparkR中分配列



我正在尝试将代码从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

相关内容

  • 没有找到相关文章

最新更新