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 - 基础:Scala fold, foldLeft, foldRight
Spark SQL functions.scala 源码解析Aggregate functions(基于 Spark 3.3.0)