Azure Synapse Notebook中筛选特定条件JSON数据的实现求助
Spark数据筛选实现方案
需求说明
已通过Spark成功读取Azure存储账户中的K8s审计日志JSON数据,需筛选满足以下条件的记录:
pod值为kube-apiserver-78或kube-apiserver-79username值为system:serviceaccount:xyz或system:serviceaccount:poq(注:username嵌套在properties.log的JSON字符串中)
修改后的代码
from pyspark.sql.functions import col, get_json_object # 读取原始数据 df = spark.read.json('abfss://insights-logs-kube-audit@azogs.dfs.core.windows.net/resourceId=/SUBSCRIPTIONS/5IS/RESOURCEGROUPS/AZURE-DEV/PROVIDERS/MICROSOFT.CONTAINERSERVICE/MANAGEDCLUSTERS/AZURE-DEV/y=2022/m=08/d=09/h=11/m=00/') # 提取嵌套在log字符串中的username字段,同时筛选符合条件的记录 filtered_df = df.filter( col("properties.pod").isin(["kube-apiserver-78", "kube-apiserver-79"]) & get_json_object(col("properties.log"), "$.user.username").isin(["system:serviceaccount:xyz", "system:serviceaccount:poq"]) ) # 展示筛选结果 filtered_df.show()
关键说明
- 提取嵌套字段:
properties.log是JSON格式的字符串,使用get_json_object函数可直接从中提取user.username的值,无需完整解析整个log结构体,简化操作。 - 多条件筛选:用
isin方法匹配多个可选值,通过&连接两个筛选条件,确保记录同时满足pod和username的要求。 - 性能优化:若数据量较大,建议先筛选pod再处理log字段,减少需要解析的JSON字符串数量,提升运行效率。
内容的提问来源于stack exchange,提问作者ZZZSharePoint
相关产品推荐
相关产品推荐

