Scala 使用spark dataframe列值作为另一列的别名
使用spark和scala,我想设置一个结构,并使用一个列值作为另一列的别名 我有这个数据框Scala 使用spark dataframe列值作为另一列的别名,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,使用spark和scala,我想设置一个结构,并使用一个列值作为另一列的别名 我有这个数据框 root |-- type: string (nullable = true) |-- metadata |-- name: string (nullable = true) |-- age: long (nullable = true) |-- gender: string (nullable = true) |-- country: string (nullable
root
|-- type: string (nullable = true)
|-- metadata
|-- name: string (nullable = true)
|-- age: long (nullable = true)
|-- gender: string (nullable = true)
|-- country: string (nullable = true)
我想要这个
root
|-- metadata
|-- TYPE_VALUE
|-- name: string (nullable = true)
|-- age: long (nullable = true)
|-- gender: string (nullable = true)
|-- country: string (nullable = true)
在我的数据框架中,我尝试使用
struct($“metadata”).as($“type”.toString()).alias(“metadata”)
,但它不起作用,它使用字段名而不是值。这是行不通的,因为这需要事先不知道的动态模式。
您所能做的最好是从中创建一个映射:
df.select(
映射('type',metadata).as(“metadata”)
)
输出如下:
+-------------------------------+
|metadata |
+-------------------------------+
|Map(type1 -> [Tom,38,M,NL]) |
|Map(type2 -> [Marijke,37,F,NL])|
+-------------------------------+
res1: Unit = ()
root
|-- metadata: map (nullable = false)
| |-- key: string
| |-- value: struct (valueContainsNull = true)
| | |-- name: string (nullable = true)
| | |-- age: long (nullable = false)
| | |-- gender: string (nullable = true)
| | |-- country: string (nullable = true)
或者根据
类型拆分数据,并将每种类型作为单独的数据帧进行处理不确定是否可以在一次传递中完成。模式是在处理之前定义的,因此我怀疑您能否在单个处理中完成它。相反,您可以尝试提取类型列,从中构建结构并转换数据帧。请插入一些您使用的代码,这将提供更多的上下文。让我用地图检查解决方案。谢谢你的回答
root
|-- type: string (nullable = true)
|-- metadata
|-- name: string (nullable = true)
|-- age: long (nullable = true)
|-- gender: string (nullable = true)
|-- country: string (nullable = true)