如果spark数据帧中的键为空,如何用null替换map。
DF.printSchema
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf C:\xampp\mysql\my.ini C:\xampp\mysql\my.cnf C:\xampp\mysql\bin\my.ini C:\xampp\mysql\bin\my.cnf
预期产出: -
-- sku_id: string (nullable = true)
-- sku_images: map (nullable = true)
-- key: string
-- value: struct (valueContainsNull = true)
-- image_id: string (nullable = true)
-- image_name: string (nullable = true)
-- image_path: string (nullable = true)
11111111|Map(null -> [null,null,null])
22222222|Map(null -> [null,null,null])
33333333|Map(largeImage_1 -> [111,222,test data])
谢谢,
答案 0 :(得分:0)
您无法使用null
作为地图的关键字,因此我猜您有一个"null"
作为关键字。您可以使用以下udf:
null
val mapSchema = DF.schema.find(_.name=="sku_images").get.dataType
val nullifyMap = udf((m: Map[String, Row]) => if (m.keySet.contains("null")) null else m, mapSchema)
val newDF = DF
.withColumn("sku_images", nullifyMap($"sku_images"))