首页 > 解决方案 > 如何使用 flatmap 分解数据集?

问题描述

我有一个案例类的序列,它有一个字符串,后跟一个字符串序列。如何在不丢失第一列的情况下对字符串序列(第二列)进行平面映射?

我试过这个:

flatmap(_.second)

但在这种情况下,我丢失了第一列。

这是我的代码:

case class A(
            first:String,
            second:Seq[String]
            )

val ds = Seq(
  A("1", Seq("A","B")),
  A("2",  Seq("C"))
) toDS

标签: scalaapache-sparkapache-spark-sqlflatmap

解决方案


一种爆炸第二列并保留第一列的方法是有效的flatMap

ds.flatMap{ case A(a,b) => b.map((a,_)) }

应该输出:

+---+---+
| _1| _2|
+---+---+
|  1|  A|
|  1|  B|
|  2|  C|
+---+---+

推荐阅读