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



我知道 Spark 是为大型数据集设计的,它很棒。但在某些情况下,我不需要这种可伸缩性,例如用于单元测试或对小数据集的数据探索。在这些条件下,与纯scala/python/matlab/R等中的实现相比,Spark的表现相对较差。

请注意,我不想完全放弃火花,我想保留用于更大工作负载的框架,而无需重新实现所有内容。

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

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

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

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

最新更新