如何在SPARKR DataFrame中的列的每个值上应用函数?

我对SPARKR比较新.我下载了SPARK 1.4并设置了RStudio来使用SPARKR库.但是,我想知道如何将函数应用于分布式DataFrame的列中的每个值,有人可以帮忙吗?

例如,

这非常有效

myFunc <- function(x) { paste(x , "_hello")}
c <- c("a", "b", "c")
d <- lapply(c, myFunc)

如何使此工作适用于分布式DataFrame.
目的是将“_ hello”附加到DF列名的每个值

DF <- read.df(sqlContext, "TV_Flattened_2.csv", source = "com.databricks.spark.csv", header="true")
SparkR:::lapply(DF$Name, myFunc)

在SPARK 1.4发布之前的SPARKR alpha版本中似乎有这种能力,为什么现在SPARK 1.4正式发布中缺少这个?

最佳答案 使用flatMap,您可以从DataFrame创建RDD,并在所有项目上应用该功能.

c <- c("a", "b", "c")
df <- createDataFrame(sqlContext, as.data.frame(c))
myFunc <- function(x) { paste(x , "_hello")}
d <- flatMap(df, myFunc)
e <- createDataFrame(sqlContext, d)

然而,缺点是只能在DataFrame的第一列上执行您所期望的操作,它会跳过所有其他列.这可以在以下示例中看到:

c <- c("a", "b", "c")
df <- createDataFrame(sqlContext, as.data.frame(c,u=c(1,2,3)))
myFunc <- function(x) { paste(x , "_hello")}
d <- flatMap(df, myFunc)
e <- createDataFrame(sqlContext, d)

它提供与第一个示例完全相同的输出,但是df以一个额外的列开始.

点赞