我知道spark是为大型数据集而设计的,它非常适合。但是在某些情况下,我不需要这种可扩展性,例如用于单元测试或用于小型数据集的数据探索。在这种情况下,与纯scala / python / matlab / R等相比,spark的执行效果相对较差。
请注意,我不想完全放弃火花,我想保留适用于较大工作量的框架,而无需重新实现所有功能。
如何在小型数据集(例如10-1000条记录)上尽可能地禁用火花开销?我尝试过在local
模式下仅使用1个分区(设置spark.sql.shuffle.partitions=1
和spark.default.parallelism=1
)吗?即使进行了这些设置,对100条记录的简单查询也要花费1-2秒的时间。
请注意,我并不是在尝试减少SparkSession
实例化的时间,只是存在给定SparkSession
的执行时间。
答案 0 :(得分:-2)
spark中的操作与scala集合具有相同的签名。
您可以实现以下内容:
val useSpark = false
val rdd: RDD[String]
val list: List[String] = Nil
def mapping: String => Int = s => s.length
if (useSpark) {
rdd.map(mapping)
} else {
list.map(mapping)
}
我认为这段代码可以进一步抽象。