为什么Spark爆炸功能比平面地图功能拆分数组慢得多?

时间:2017-10-15 22:57:10

标签: apache-spark apache-spark-sql apache-spark-dataset

我是Spark和Spark SQL的新手。我有一个2列的数据集,“col1”和“col2”,而“col2”最初是一个长的Seq。我想将“col2”分成多行,这样每行只有一行。

我尝试使用爆炸功能而不是使用flatMap和我自己的映射器功能。他们似乎有显着的性能差异。其他一切都保持不变,“爆炸”功能似乎比flatMap慢得多(数量级取决于数据大小)。为什么呢?

选项1:使用“爆炸”

val exploded = data.withColumn("col2", explode(col("col2")))

选项2:使用手动flatMap

case class MyPair(col1: Long, col2: Long)

def longAndLongArrayMapper(colToKeep: Long, colToExplode: Seq[Long]) = {
    (for (val <- colToExplode) yield MyPair(val, colToKeep))
 }

val exploded = data.flatMap{ (x: Row) =>
      longAndLongArrayMapper(x.getAs[Long]("col1"), (x.getAs[Seq[Long]]("col2"))) }

0 个答案:

没有答案