【问题标题】:How to make a new DataFrame in sparkR如何在 sparkR 中创建一个新的 DataFrame
【发布时间】:2015-07-31 10:08:38
【问题描述】:

在 sparkR 中,我将 data 作为 DataFrame。 我可以像这样在data 中附加一个条目:

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

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

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

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

【问题讨论】:

    标签: sparkr


    【解决方案1】:

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

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

    祝你好运, 纳特

    【讨论】:

      【解决方案2】:

      == 列表不起作用,%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)
      

      检查结果。

      【讨论】:

      • 所有这些都适用于长度较小的向量“list2”。但是,如果我们有一个向量“list2”,其中长度(list2)=10000,我在 sparkR 中收到此消息:在为函数“过滤器”选择方法时评估参数“条件”时出错:错误:评估嵌套太深:无限递归/ 选项(表达式=)?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多