将嵌套的JSON拆分为大小相等的文件PySpark/Python

2024-10-06 13:11:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用pyspark生成一个嵌套json,如下所示:

{
    "batch_key": 1,
    "client_key": 1,
    "client_name": "ABC",
       "Claims": [
        {
            "claim_key": "A",
            "client_key": "B",
            "client_name": "ATT"
           
        },
        {
            "claim_key": "B",
            "client_key": "B",
            "client_name": "ATT"
           
        }
    ]
}

但理想情况下,应将其分成相等的部分,如下所示:

{
    "batch_key": 1,
    "client_key": 1,
    "client_name": "ABC",
       "Claims": [
        {
            "claim_key": "A",
            "client_key": "B",
            "client_name": "ATT"
           
        }
       
    ]
}


{
    "batch_key": 1,
    "client_key": 1,
    "client_name": "ABC",
       "Claims": [
        {
            "claim_key": "B",
            "client_key": "B",
            "client_name": "ATT"
           
        }
    ]
}

实际的json负载将大得多,因此需要进行上述拆分,以便API能够正确地使用它。有没有一种方法可以使用sparksql/pyspark/python实现上述功能


Tags: 方法keynameclientapijsonbatch情况
1条回答
网友
1楼 · 发布于 2024-10-06 13:11:13

对于每个批次记录,您可以提取索赔map以创建每个索赔的多个批次,然后对结果调用展平来flatten结果

例如,假设您有一个批次流/RDD


batches = batches
.map( lambda batch :   [{
    "batch_key": batch[ "batch_key"],
    "client_key": batch["client_key"],
    "client_name": batch["client_name"],
    "Claims": [ claim ]
} for claim in batch["Claims"] ] )
.flatten()

基于Python的版本和每个JSON记录中的属性/键的数量,您可以考虑在声明图中合并或创建新字典的不同选项-参见^ {A1}

相关问题 更多 >