首页 > 解决方案 > 创建具有嵌套结构的 DataFrame 并从输入表中填充数据

问题描述

我正在使用 Scala 中的 Spark,并希望将现有数据集(数据框)转换为包含嵌套结构的新表。

示例输入:columnA columnB columnC columnD columnE

示例输出:columnA columnB columnC columnF:{columnD, columnE} (创建一个包含 D 和 E 作为嵌套结构的新列)

我可以使用转换 columnA-C 很简单.withColumn(),但我不确定如何指定新的嵌套列结构并从同一个表中填充数据。我认为StructType(Array(StructField1, StructField2))需要定义嵌套模式,如何将 StructType 与“常规”列结合并插入数据?

标签: scalaapache-sparkapache-spark-sql

解决方案


如果您使用的是 Spark 版本 3.1.1,那么在课堂上withField引入了一个新的 API。Column

您可以将其用作

dataframe
    .withColumn("ColumnF",$"ColumnF".withField("ColumnA",$"ColumnA")
    .withColumn("ColumnF",$"ColumnF".withField("ColumnE",$"ColumnE")

确保导入 scala 隐式。

对于旧版本的 Spark,您可以利用struct以下功能:

dataframe
    .withColumn("ColumnF",struct($"ColumnF.*", $"ColumnA")
    .withColumn("ColumnF",struct($"ColumnF.*",$"ColumnE")

推荐阅读