我正在尝试将代码从PySpark迁移到SparkR。要修改一些我在PySpark中使用'withColumn'的列。但是,在SparkR中,它会生成一个新列。然后我尝试了像
这样的东西df$a <- f(df$a)
那很好也很好。但是,假设我想在函数内部或for循环中使用它,并为许多变量重复它。在这种情况下,遗憾的是它不起作用:
df[['a']] <- f(df[['a']])
我在执行以下操作时意识到 工作:
df$a <- f(df[['a']])
我绝对需要使用[[<-
或其他方式。想法?
答案 0 :(得分: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