我有一个相当大的数据集(100个million+记录和100个列),我正在用spark处理。我正在将数据读入spark数据集,并希望过滤此数据集并将其字段的子集映射到case类。
代码看起来有点类似,
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)
哪种方法更好?关于如何让这段代码更有性能,还有什么其他的建议吗?
谢谢!
编辑
我运行了一些测试来比较运行时,看起来方法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()
}
https://stackoverflow.com/questions/56761223
复制相似问题