小编Sai*_*thy的帖子

flatmap 是否比 filter+map 提供更好的性能?

我有一个相当大的数据集(1 亿多条记录,有 100 列),我正在用 spark 进行处理。我正在将数据读入 spark 数据集,我想过滤此数据集并将其字段的子集映射到案例类。

代码看起来有些相似,

case class Subset(name:String,age:Int)
case class Complete(name:String,field1:String,field2....,age:Int)

val ds = spark.read.format("csv").load("data.csv").as[Complete]

#approach 1
ds.filter(x=>x.age>25).map(x=> Subset(x.name,x.age))

#approach 2
ds.flatMap(x=>if(x.age>25) Seq(Subset(x.name,x.age)) else Seq.empty)

Run Code Online (Sandbox Code Playgroud)

哪种方法更好?关于如何使此代码更具性能的任何其他提示?

谢谢!

编辑

我运行了一些测试来比较运行时,看起来方法 2 更快,我用于获取运行时的代码如下,

val subset = spark.time {
   ds.filter(x=>x.age>25).map(x=> Subset(x.name,x.age))
}

spark.time {
   subset.count()
}

and 

val subset2 = spark.time {
   ds.flatMap(x=>if(x.age>25) Seq(Subset(x.name,x.age)) else Seq.empty)
}

spark.time {
   subset2.count()
}
Run Code Online (Sandbox Code Playgroud)

scala apache-spark

6
推荐指数
1
解决办法
637
查看次数

标签 统计

apache-spark ×1

scala ×1