将嵌套的JSON拆分为大小相等的文件PySpark/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实现上述功能?

对于每个批次记录,您可以提取索赔,map覆盖索赔以创建每个索赔的多个批次,然后对结果调用flat以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记录中的属性/键的数量,您可以考虑在声明映射中合并或创建新字典的不同选项-请参阅python 2和3 中的合并字典

最新更新