scala - 如何在结构中的元素内添加元素,该元素是结构中的元素 spark scala中的spark Dataframe
问题描述
我需要在结构本身内部的结构中添加一个元素。
文件:
{"teamName":{"Redbull"},"info":{"drivers":{"driver":{"Max Verstappen","Alex Albon"},"carNumbers":{"33","23"},"carName":"RB7"}}}
基础DF:
val jsonDF=spark.read.json("path")
jsonDF.printSchema
root
|-- info: struct (nullable = true)
| |-- drivers: struct (nullable = true)
| | |-- carName: string (nullable = true)
| | |-- carNumbers: string (nullable = true)
| | |-- driver: string (nullable = true)
|-- teamName: string (nullable = true)
我需要在里面添加年龄,信息 -> 驱动程序 ->
当我这样做时
jsonDF.withColumn("info",struct(col("info.drivers").alias("drivers"), lit("24").alias("age"))).printSchema
root
|-- info: struct (nullable = false)
| |-- drivers: struct (nullable = true)
| | |-- carName: string (nullable = true)
| | |-- carNumbers: string (nullable = true)
| | |-- driver: string (nullable = true)
| |-- age: string (nullable = false)
|-- teamName: string (nullable = true)
我在信息下得到它,我需要在驱动程序中得到它,我该怎么做?
解决方案
我会选择一个名为 spark-hats 的库https://github.com/AbsaOSS/spark-hats
然后就是
import za.co.absa.spark.hats.Extensions._
val jsonDFwithAge = jsonDF.nestedWithColumn("info.drivers.age", lit("24"))
jsonDFwithAge.printSchema
root
|-- info: struct (nullable = false)
| |-- drivers: struct (nullable = false)
| | |-- carName: string (nullable = true)
| | |-- carNumbers: string (nullable = true)
| | |-- driver: string (nullable = true)
| | |-- ag: string (nullable = false)
|-- teamName: string (nullable = true)
推荐阅读
- android - 在 Glide 中找不到签名()
- identityserver4 - 授权流访问和刷新令牌
- oauth - Microsoft Web 插件“Office.context.mailbox.getCallbackTokenAsync”在我的 Exchange 2016 上返回响应“失败”,但在 Office 365 在线版中有效
- python - 项目目录结构python数据
- css - 第 1 行和第 2 行的 CSS 表格样式,然后是第 3 和第 4 行的另一种样式并重复,总共两种样式
- c# - 如何使用 Linq Select 投影修复 Entity Framework Core“参数类型不匹配”
- c++ - C++ `this` 指针
- security - 将应用程序注册设置为“任何组织目录中的帐户”有什么影响
- python-3.x - 如何在pyinstaller中更改窗口的标题?
- haskell - Haskell Bool to Char 函数似乎有错误的类型