0

在 sparkR 中,我有data一个 DataFrame。我可以像这样附加一个条目data

newdata <- filter(data, data$column == 1)

我怎样才能附加多个?
假设我想附加向量中的所有元素,list <- c(1,6,10,11,14)或者如果list是 DataFrame 1 6 10 11 14

newdata <- filter(data, data$column == list)

如果我这样做,我会得到一个错误。

4

2 回答 2

1

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

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

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

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)

也许这就是你要找的……也许不是。尽管如此,我希望它会有所帮助。

祝你好运,奈特

于 2017-07-19T18:19:58.337 回答
0

== 列表不起作用, %in% 列表也更有意义,但您可以按如下方式执行(我包含了一个示例 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)

检查结果。

于 2015-07-31T11:03:54.207 回答