如何在Spark SQL中将字符串转JSON并提取Delta Log的experience最大值
解析Delta Log的add.stats并提取experience最大值
步骤1:解析字符串格式的add.stats字段
Delta Log里的add.stats是JSON格式的字符串,用Spark SQL的from_json函数就能把它转成结构化数据。先定义好stats对应的Schema——stats包含minValues、maxValues、rowCount等字段,我们要的experience值就在maxValues里。
示例SQL片段:
WITH parsed_stats AS ( SELECT from_json( add.stats, 'struct<maxValues:struct<experience:double>, minValues:struct<experience:double>, rowCount:long>' ) AS stats_struct FROM delta.`abfss://<container>@<storage-account>.dfs.core.windows.net/<delta-table-path>/_delta_log` WHERE add IS NOT NULL )
步骤2:提取experience的全局最大值
从解析后的stats_struct.maxValues.experience里取出每个日志条目的experience最大值,再用MAX()函数聚合得到全局最大值:
完整SQL示例:
WITH parsed_stats AS ( SELECT from_json( add.stats, 'struct<maxValues:struct<experience:double>, minValues:struct<experience:double>, rowCount:long>' ) AS stats_struct FROM delta.`abfss://<container>@<storage-account>.dfs.core.windows.net/<delta-table-path>/_delta_log` WHERE add IS NOT NULL ) SELECT MAX(stats_struct.maxValues.experience) AS max_experience FROM parsed_stats;
额外注意
- 如果
experience是整数类型,把Schema里的double改成long或int即可 - 要确保Spark已配置好Azure Blob Storage的访问权限(比如存储密钥、SAS令牌)
- 若部分日志条目不含
experience字段,可加COALESCE处理空值,比如COALESCE(stats_struct.maxValues.experience, 0)
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

