如何在 Spark 中对嵌套的 Dataframe 进行平面映射

Posted

技术标签:

【中文标题】如何在 Spark 中对嵌套的 Dataframe 进行平面映射【英文标题】:How to flatmap a nested Dataframe in Spark 【发布时间】:2016-04-22 04:17:52 【问题描述】:

我有如下所示的嵌套字符串。我想对它们进行平面映射以在 Spark 中生成唯一的行

我的数据框有

A,B,"x,y,z",D

我想把它转换成类似的输出

A,B,x,D
A,B,y,D
A,B,z,D

我该怎么做。

基本上我如何做平面地图并在数据框内应用任何功能

谢谢

【问题讨论】:

【参考方案1】:

Spark 2.0+

Dataset.flatMap:

val ds = df.as[(String, String, String, String)]
ds.flatMap  
  case (x1, x2, x3, x4) => x3.split(",").map((x1, x2, _, x4))
.toDF

Spark 1.3+

使用splitexplode functions:

val df = Seq(("A", "B", "x,y,z", "D")).toDF("x1", "x2", "x3", "x4")
df.withColumn("x3", explode(split($"x3", ",")))

Spark 1.x

DataFrame.explode(在 Spark 2.x 中已弃用)

df.explode($"x3")(_.getAs[String](0).split(",").map(Tuple1(_)))

【讨论】:

我必须记住 Dataset 选项 -- 感谢您添加它。 @DavidGriffin 谢谢。我应该将其作为重复项关闭,但我错误地标记了错误的问题,所以我决定回答并添加一些新内容:) @zero323 我在functions 中检查了explode 的scala api 文档,但它并未显示为已弃用。 spark.apache.org/docs/2.1.0/api/scala/… @elghoto 该链接指向实用函数 explode 的文档,而我认为 zero323 指的是 DataFrame 转换 explode,显然自 2.0.0 以来已弃用:@ 987654323@

以上是关于如何在 Spark 中对嵌套的 Dataframe 进行平面映射的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Pandas 或 Spark Dataframe 展平嵌套的 Excel 数据?

Spark使用DataFrame读取复杂JSON中的嵌套数组

向 Spark DataFrame 添加嵌套列

您可以将 Spark Dataframe 嵌套在另一个 Dataframe 中吗?

如何在 spark sql 中对数组进行成员操作?

在 Spark DataFrame 中展平嵌套数组