在sparkR中,我将<BR />
作为DataFrame。
我可以在data
中添加一个条目,如下所示:
data
如何附上不止一个?
假设我想在向量newdata <- filter(data, data$column == 1)
中附加所有元素,或者list <- c(1,6,10,11,14)
是数据框list
。
1 6 10 11 14
如果我这样做,我会收到错误。
答案 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)
检查结果。