r - 如何编辑 SparkDataFrame 的架构?

标签 r apache-spark sparkr

我有一个 SparkDataFrame,我想在其上使用 dapply() 应用一些函数并添加一个新列。

SparkR 中的 dapply 期望模式与被调用函数的输出相匹配。 例如,

#Creating SparkDataFrame

sdf<-as.DataFrame(iris)

#Initiating Schema

schm<-structType(structField("Sepal_Length", "double"),structField("Sepal_Width", "double"),structField("Petal_Length","double"),structField("Petal_Width","double"),structField("Species","string"),structField("Specie_new","string"))

#dapply code
sdf2<-dapply(sdf,function(y)
  {
    y$Specie_new<-substr(y$Specie,nchar(y$Species)-1,nchar(y$Species))
return(y)
},schm)

有没有更好的方法来做同样的事情?我的意思是,如果我有 100 列,那么这不是一个可行的选择,在这些情况下我应该做什么?

最佳答案

对于像这样的简单情况,可以说更好的方法是避免 dapply。您可以轻松地使用简单的正则表达式来实现相同的结果:

regexp_extract(df$Species, "^.*(.{2})$", 1)

或 Spark SQL 函数的组合(SparkR::substrSparkR::length)。

不过,您可以轻松地重用现有架构来创建新架构。假设您要添加新字段 foo:

foo <- structField("foo", "string")

只需提取现有字段并将它们组合起来:

do.call(structType, c(schema(df)$fields(), list(foo)))

关于r - 如何编辑 SparkDataFrame 的架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39148749/

相关文章:

r - ggplot2 热图的刻度颜色

r - 将ts对象转换为data.frame

apache-spark - 如何获得pyspark数据帧的相关矩阵?

mysql - 从多个 MySQL 表中获取具有合并值的 R 数据框

r - 如何使用 magick 包删除图像背景?

apache-spark - Zeppelin无法读取本地文件系统的文件路径

java - 由于某些未知原因,Spark 作业在 saveAsHadoopDataset 阶段失败,因为执行器丢失

r - 从 R 笔记本访问 Azure Blob 存储

hadoop - 在 hortonworks HDP docker 镜像上安装 Rstudio

r - 在 SparkR 中应用 withColumn 函数和正则表达式模式 : reformat a string column in a DataFrame