Spark scala重命名贴图列
我想将map下的Spark scala重命名贴图列,scala,apache-spark,Scala,Apache Spark,我想将map下的键重命名为名称,\u 1为行数,\u 2为状态 root |-- id: string (nullable = true) |-- info: map (nullable = true) | |-- key: string | |-- value: struct (valueContainsNull = true) | | |-- _1: long (nullable = false) | | |-- _2: str
键重命名为名称
,\u 1
为行数
,\u 2
为状态
root
|-- id: string (nullable = true)
|-- info: map (nullable = true)
| |-- key: string
| |-- value: struct (valueContainsNull = true)
| | |-- _1: long (nullable = false)
| | |-- _2: string (nullable = true)
请提供帮助最便宜、最简单的解决方案是使用新模式进行cast
:
val df = Seq(("1", Map("foo" -> (1L, "bar")))).toDF("id", "info")
df.withColumn(
"info",
$"info".cast("map<string,struct<rownum:long,status:string>>")
).printSchema
如果愿意,您可以使用数据类型
对象来代替字符串描述,但这要详细得多
无法重命名键
(和值
),因为没有架构的一部分
udf
可以提供另一个选项,但它的性能低于标准,需要产品
类型来表示值:这太棒了!