scala - 创建具有嵌套结构的 DataFrame 并从输入表中填充数据
问题描述
我正在使用 Scala 中的 Spark,并希望将现有数据集(数据框)转换为包含嵌套结构的新表。
示例输入:columnA columnB columnC columnD columnE
示例输出:columnA columnB columnC columnF:{columnD, columnE} (创建一个包含 D 和 E 作为嵌套结构的新列)
我可以使用转换 columnA-C 很简单.withColumn()
,但我不确定如何指定新的嵌套列结构并从同一个表中填充数据。我认为StructType(Array(StructField1, StructField2))
需要定义嵌套模式,如何将 StructType 与“常规”列结合并插入数据?
解决方案
如果您使用的是 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")
推荐阅读
- javascript - 有没有办法简化这个 JavaScript 代码?
- wordpress - 同时注册两个不同的wordpress
- php - PHP APCU 操作是原子的吗
- c - C 套接字发送和接收
- docusignapi - Docusign PHP 添加多个签名选项卡
- javascript - React Native 在单独的方法文件中更改 Redux 状态
- sql - 计算最大并发用户会话数
- .net - 我是否定义了自己的端点来支持 CORS OPTIONS 请求
- arrays - 我怎样才能打开一个 GenericArray
成相同长度的数组? - ios - 未找到 Xcode 模拟器符号:_SimCarPlayPropertyKeyHasBackButton