小型数据集的最佳(低延迟)火花设置

时间:2019-12-11 19:44:50

标签: apache-spark

我知道spark是为大型数据集而设计的,它非常适合。但是在某些情况下,我不需要这种可扩展性,例如用于单元测试或用于小型数据集的数据探索。在这种情况下,与纯scala / python / matlab / R等相比,spark的执行效果相对较差。

请注意,我不想完全放弃火花,我想保留适用于较大工作量的框架,而无需重新实现所有功能。

如何在小型数据集(例如10-1000条记录)上尽可能地禁用火花开销?我尝试过在local模式下仅使用1个分区(设置spark.sql.shuffle.partitions=1spark.default.parallelism=1)吗?即使进行了这些设置,对100条记录的简单查询也要花费1-2秒的时间。

请注意,我并不是在尝试减少SparkSession实例化的时间,只是存在给定SparkSession的执行时间。

1 个答案:

答案 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)
}

我认为这段代码可以进一步抽象。