如果来自(key,struct)的map键在spark数据帧中为null,如何用null替换Map

时间:2018-04-20 13:21:39

标签: scala apache-spark

如果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])

谢谢,

1 个答案:

答案 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"))