scala - fold,aggregate,iterator

Posted 苏轶然

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala - fold,aggregate,iterator相关的知识,希望对你有一定的参考价值。

  import org.json4s._
  import org.json4s.jackson._
  import org.json4s.jackson.JsonMethods._
  import org.json4s.JsonDSL._
  import org.json4s.JsonDSL.map2jvalue
  // or
  //import org.json4s.JsonDSL.WithDouble._
  //import org.json4s.JsonDSL.WithBigDecimal._
  //import scala.io.Source
  //import scala.collection.JavaConverters._
  //import scala.collection.mutable.Buffer
  import java.io.{File,PrintWriter}
  import java.util.Date
  implicit val formats = Serialization.formats(ShortTypeHints(List()))

使用json4s进行json操作,踩了scala一个坑。

    val data = readConf(file)
    val t = data.head
    val r = "Response"
    val n = "Title"
    val p = "Plot"
    val contents = data.filter( row => (row \ r).extract[String].toBoolean).filter(row => (row \ p).extract[String] != "N/A")
    val plots = contents.map{
      row =>
        val title = (row \ n).values.toString
        val plots = (row \ p)
        title -> plots
    }

 

三种方式实现类元素的拼接:要注意操作符函数的参数顺序。

    // val plotsIter = plots.iterator
    // var rstObj = plotsIter.next ~ plotsIter.next
    // while(plotsIter.hasNext) rstObj = plotsIter.next ~ rstObj
    val (head,tail) = plots.splitAt(2)
    val rstObj = tail.foldRight(head.head ~ head.last)(_ ~ _)
    val rstObj = tail.aggregate(head.head ~ head.last)(_ ~ _, _ ~ _)

fold对操作符参数传参顺序和定义顺序一致。

fold(x)((a,b)=>foo(a,b))

先占坑,等忙过这阵子,具体给出试错经过和结论分析。

以上是关于scala - fold,aggregate,iterator的主要内容,如果未能解决你的问题,请参考以下文章

Scala 学习之 aggregate函数

scala - 基础:Scala fold, foldLeft, foldRight

scala 流计算之 aggregate()

scala 流计算之 aggregate()

scala 流计算之 aggregate()

Spark SQL functions.scala 源码解析Aggregate functions(基于 Spark 3.3.0)