Scala 如何更改两级架构树中字段的数据类型?
现在我有了一个带有模式的数据框架:Scala 如何更改两级架构树中字段的数据类型?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,现在我有了一个带有模式的数据框架: root |-- id: string (nullable = true) |-- st_one: struct (nullable = true) | |-- tid: long (nullable = true) | |-- st_two: struct (nullable = true) | | |-- name: string (nullable = true) | | |-- score: long (
root
|-- id: string (nullable = true)
|-- st_one: struct (nullable = true)
| |-- tid: long (nullable = true)
| |-- st_two: struct (nullable = true)
| | |-- name: string (nullable = true)
| | |-- score: long (nullable = true)
|-- ts: double (nullable = true)
|-- date: string (nullable = true)
我想将分数的类型从long
更改为double
。有什么好办法吗?
顺便说一句,我使用的是Scala
我已经知道如何通过“列出”所有字段来做到这一点。我想要一个更常见的方法,即使Stu-2包含1000个或更多字段也可以使用。您可以像这样更新struct-type列
st-u-one
:
val df1 = df.withColumn(
"st_one",
struct(
$"st_one.tid",
struct(
$"st_one.st_two.name",
$"st_one.st_two.score".cast("double").as("score")
).as("st_two")
)
)
您可以执行复杂的强制转换:
val df2 = df.withColumn("st_one", $"st_one".cast("struct<tid:long, st_two:struct<name:string, score:double>>"))
val df2=df.withColumn(“st_one”,“st_one.”强制转换(“struct”))
谢谢!但这些代码基于已知字段或固定数量。例如,如果st_two
包含1000个字段,我很难列出所有字段并选择要更新的字段。有没有更常用的方法来解决这个问题@blackbishop@Selyx这有点复杂,因为您必须遍历所有模式字段。请看我的,它可以给你一个如何做到这一点的想法。谢谢!但这些代码基于已知字段或固定数量。例如,如果st_2包含1000个字段,我很难列出所有字段并选择要更新的字段。有没有更常用的方法来解决这个问题@麦克