Pin*_* Li 7 scala apache-spark apache-spark-sql
我想向数据框添加一个新的地图类型列,如下所示:
|-- cMap: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
Run Code Online (Sandbox Code Playgroud)
我试过代码:
df.withColumn("cMap", lit(null).cast(MapType)).printSchema
Run Code Online (Sandbox Code Playgroud)
错误是:
<console>:132: error: overloaded method value cast with alternatives:
(to: String)org.apache.spark.sql.Column <and>
(to: org.apache.spark.sql.types.DataType)org.apache.spark.sql.Column
cannot be applied to (org.apache.spark.sql.types.MapType.type)
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以将新列转换为 Map 或 MapType?谢谢
小智 5
我遇到了同样的问题,最后我找到了解决方案:
df.withColumn("cMap", typedLit(Map.empty[String, String]))
Run Code Online (Sandbox Code Playgroud)
来自 ScalaDocs 的typedLit:
该函数与 [[lit]] 的区别在于该函数可以处理参数化的 scala 类型,例如:List、Seq 和 Map。
与其他类型不同,MapType它不是一个可以按原样使用的对象(它不是扩展的对象DataType),您必须调用MapType.apply(...)它需要键和值类型作为参数(并返回该类的实例MapType ):
df.withColumn("cMap", lit(null).cast(MapType(StringType, StringType)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4720 次 |
| 最近记录: |