从多个键值对操作 Spark SQL 中 Map 结构中键的单个值.对单个值应用 unbase64



我有一个要求,我们正在接收一个文件,它有多列。一列数据类型是映射结构。其他是字符串。 在此 Map 结构中,每条记录有多个键:值对。

例如地图数据 -

地图 (f-扩展端口:451,

custNo : 415723, 
channel : netsite, 
y-ub-eg-en-author : "7Im5hbWUiOiJpbnRlcm5hbEFjY291bnRJZHMiLCJ2YWx1ZSI6WyIwNjIw16", /*This value is base64 */
sessionid : e5cdb71d3572dd6f7gh8jh6dssf8g688dda0, 
y-expandeded-proto : https) 

每条记录可能有不同的键值对。

要求:- 我们必须找到键"y-ub-eg-en-author"并使用 Spark Sql 在相应的值上应用 unbase64(( 函数来解码值。如果没有这样的键(y-ub-eg-en-author(,那么什么也没做。

谁能告诉我们可能的解决方案,我们如何在特定键值上应用 unbase64 函数而不影响其他键值对。

谢谢

尝试了以下选项,它正在解决。请检查一下。

1(第一张地图被炸毁了。

2( 根据关键条件应用 unbase64。

3(然后再次将分解列更改为MAP。按主键列分组。

val Query="""SELECT CAST(Id AS String) AS Primary_ID,key_index as key_index,case when key_index in ('x-insider-token','x-ent-auth') then CAST(unbase64( CAST(key_value AS STRING) ) AS STRING) else key_value end as value FROM kafka_avro_events LATERAL VIEW EXPLODE(map_value) as key_index, key_value """
val df1 = spark.sql(Query)
val result = df1.withColumn("map", map($"key_index", $"value")).groupBy("Primary_ID").agg(collect_list("map")).as[(String, Seq[Map[String, String]])].map { case (id, list) => (id, list.reduce(_ ++ _)) }.toDF("id", "gMap")
result.show(truncate = false)
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|id     |gMap                                                                                                                                                                                                                |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|corrId1|Map(f-expaneded-port -> 451, custNo -> 415723, channel -> netsite, y-ub-eg-en-author -> {"decision":"PERMIT","authorized":true} , sessionid -> e5cdb71d3572dd6f7gh8jh6dssf8g688dda0, y-expandeded-proto -> https    |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

最新更新