【问题标题】:Expression of type Seq[unit] does not conform to expected type Seq[DataFrame] in scalaSeq[unit] 类型的表达式不符合 scala 中的预期类型 Seq[DataFrame]
【发布时间】:2017-04-13 02:10:44
【问题描述】:

在我的函数中,我返回一个finalDF,一个数据帧序列。在下面显示的循环中,map 返回Seq[DataFrame] 并且它被存储在finalDF 中以便能够返回给调用者,但是在某些需要进一步处理的情况下,我想为每次迭代存储过滤后的数据帧并将其传递给下一个循环。

我该怎么做?如果我尝试将其分配给某个临时值,它会抛出 Seq[unit] 类型的表达式不符合预期类型 Seq[DataFrame] 的错误。

var finalDF: Seq[DataFrame] =null

    for (i <- 0 until stop){
  finalDF=strataCount(i).map(x=> {
    df.filter(df(cols(i)) === x)

    //how to get the above data frame to pass on to the next computation?
    }
  )

}

问候

【问题讨论】:

    标签: scala apache-spark dataframe


    【解决方案1】:

    也许这会有所帮助:

    val finalDF: Seq[DataFrame] = (0 to stop).flatMap(i => strataCount(i).map(x => df.filter(df(cols(i)) === x))).toSeq
    

    flatMapSeq(Seq) 展平。

    (0 to stop) 将从0 循环到stopflatMap 将变平List,例如:

    scala> (0 to 20).flatMap(i => List(i))
    res0: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
    scala> (0 to 20).map(i => List(i)).flatten
    res1: scala.collection.immutable.IndexedSeq[Int] = Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
    

    对于两个计数器,也许你可以这样做:

    (0 to stop).flatMap(j => {
     (0 to stop).flatMap(i => strataCount(i).map(x => df.filter(df(cols(i)) === x)))
    }).toSeq
    

    或尝试:for yield,参见:Scala for/yield syntax

    【讨论】:

    • 谢谢,这真的很有帮助,如果你不介意,你能解释一下这个语法吗?还有一件事,我想对序列 finalDF 中的所有值应用另一个循环,是否可以在这里指定两个计数器?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多