ADF数据流解析复杂JSON遇阻,求提取卖家ID/名称方案
提取非数组JSON中的卖家ID和名称:ADF数据流与PySpark解决方案
ADF数据流实现步骤
因为你的JSON是嵌套对象结构而非标准数组,直接用Flatten转换会失败,需先把对象转成数组再处理:
- 配置数据源:选择Blob存储的JSON文件,将文件模式设置为
Single document(适配单个JSON对象,而非数组格式)。
- 配置数据源:选择Blob存储的JSON文件,将文件模式设置为
- 添加派生列转换:新增一列(比如命名为
sellers_array),使用ADF内置的entries()函数将卖家对象转换为键值对数组。假设卖家数据在根节点的sellers字段下,表达式写为:entries(sellers)。这个函数会把类似{"sellerA": {"seller ID": "123", "seller Name": "张三"}}的对象转成[{"key": "sellerA", "value": {"seller ID": "123", "seller Name": "张三"}}]的数组。
- 添加派生列转换:新增一列(比如命名为
- 添加Flatten转换:将展开的数组列选择为
sellers_array,展开后就能通过value.seller ID和value.seller Name访问目标字段。可以再添加派生列转换,把这两个字段重命名为更简洁的名称(比如seller_id、seller_name)。
- 添加Flatten转换:将展开的数组列选择为
PySpark实现代码
如果ADF数据流的方式暂时难以操作,用PySpark可以快速处理这种非数组JSON:
# 读取单个JSON文档(multiLine=True确保读取完整的JSON对象) df = spark.read.json("abfss://your-container@your-storage.dfs.core.windows.net/path/to/file.json", multiLine=True) # 导入所需函数 from pyspark.sql.functions import explode, map_entries, col # 将卖家对象转成键值对数组并展开,提取目标字段 seller_df = df.select(explode(map_entries(col("sellers"))).alias("seller_item")) \ .select( col("seller_item.value.seller ID").alias("seller_id"), col("seller_item.value.seller Name").alias("seller_name") ) # 查看处理结果 seller_df.display()
注:如果你的卖家数据不在sellers字段下,替换成实际的字段名即可。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

