Lar*_* Lu 6 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")))
Run Code Online (Sandbox Code Playgroud)
选项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"))) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |