我正在加入两个DataFrame,其中有Map[String, Int]
我希望合并的DF在[]
类型列上有一个空地图null
而不是Map
。
val df = dfmerged.
.select("id"),
coalesce(col("map_1"), lit(null).cast(MapType(StringType, IntType))).alias("map_1"),
coalesce(col("map_2"), lit(Map.empty[String, Int])).alias("map_2")
对于map_1
列,我会插入null
,但我想要空地图
map_2给了我一个错误:
java.lang.RuntimeException:不支持的文字类型类 scala.collection.immutable.Map $ EmptyMap $ Map()
我也试过udf
函数,如:
case class myStructMap(x:Map[String, Int])
val emptyMap = udf(() => myStructMap(Map.empty[String, Int]))
也没用。
当我尝试类似的事情时:
.select( coalesce(col("myMapCol"), lit(map())).alias("brand_viewed_count")...
或
.select(coalesce(col("myMapCol"), lit(map().cast(MapType(LongType, LongType)))).alias("brand_viewed_count")...
我收到错误:
由于数据类型不匹配,无法解析'map()':无法强制转换 MapType(NullType,NullType,false)到MapType(LongType,IntType,true);
答案 0 :(得分:4)
在Spark 2.2中
df.withColumn("map", coalesce($"map", map().cast("map<string,int>"))).show
// +---+-----------------+
// | id| map|
// +---+-----------------+
// | 1| Map()|
// | 2|Map(foobar -> 42)|
// +---+-----------------+
在
position:relative;