如何在sparkR中创建一个新的DataFrame

时间:2015-07-31 10:08:38

标签: sparkr

在sparkR中,我将<BR />作为DataFrame。 我可以在data中添加一个条目,如下所示:

data

如何附上不止一个?
假设我想在向量newdata <- filter(data, data$column == 1) 中附加所有元素,或者list <- c(1,6,10,11,14)是数据框list

1 6 10 11 14

如果我这样做,我会收到错误。

2 个答案:

答案 0 :(得分:1)

如果您最终尝试通过唯一值列表过滤spark DataFrame,则可以使用merge操作执行此操作。如果您正在谈论从长数据格式到宽数据格式,您需要确保每个级别的观察数量相同。你正在考虑的因子变量。如果要按列对Spark数据框进行子集化,也可以使用select语句,或者通过将数据$ blah粘贴到@中来构建select语句,然后按@Wannes的建议执行eval(parse(text=bigTextObject))。也许生成大select语句的函数是你想要的(如果你按列名过滤)...如果你试图从单个列中提取值,你想要merge

根据我的理解,似乎您想要使用包含大量列的大型Spark DataFrame,并且只接受您感兴趣的列,如问题中的list所示。

这是一个生成spark select语句的小函数:

list<- c(1,2,5,8,90,200)
listWithDataPrePended<- paste0('data', '$', list)
gettingCloser<- noquote(paste0(listWithDataPrePended, collapse = ','))
finalSelectStatement<- noquote(paste("select(data,", gettingCloser, ")"))
finalData<- eval(parse(text=finalSelectStatement))
finalData<- SparkR::collect(finalData)

也许这就是你正在寻找的......也许不是。尽管如此,我希望它有所帮助。

祝你好运, 内特

答案 1 :(得分:0)

==列表不起作用,%列表中的%也没有用,但是你可以按照以下方式进行操作(我已经包含了一个示例data.frame):

dataLocal <- data.frame(column=c(rep(1,10),rep(2,10),rep(3,10)),column2=1:30)
data      <- createDataFrame(sqlContext,dataLocal)
newdata   <- filter(data, (data$column == 1)|(data$column == 2))
一般

或更多(现在你的list2可以是任意长度)

list2 <- c(1,2)
listEquals  <- paste("(data$column == ",list2,")",sep="")
checkEquals <- paste(listEquals,collapse="|")
func  <- paste("filter(data, ",checkEquals,")",sep="")
newdata <- eval(parse(text=func))

不要忘记运行

collect(newdata)

检查结果。