如何在 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+。
使用split
和explode
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中的嵌套数组