在Pyspark中是否有一种有效的方法来找到数组中具有最高值但返回另一个字段的元素?

w8f9ii69  于 5个月前  发布在  Spark
关注(0)|答案(1)|浏览(63)

我想做一些类似于array_max()的事情,但我需要返回另一个不用于排序的字段。
下面是列中的数据,我们称之为df.idInfo

[
    {
    "accountId": 123,
    "lastUpdated": {
        "sourceSystemTimestamp": "2023-01-01 07:44:58.000",
        "userId": null
        },
    "individualNumber": 33333
    },
    {
    "accountId": 456,
    "lastUpdated": {
        "sourceSystemTimestamp": "2023-02-12 18:44:58.000",
        "userId": null
        },
    "individualNumber": 22222
    },
    {
    "accountId": 789,
    "lastUpdated": {
        "sourceSystemTimestamp": "2023-03-23 23:44:58.000",
        "userId": null
        },
    "individualNumber": 11111
    }
]

字符串
我想从具有最新值lastUpdated.sourceSystemTimestamp的元素中获取individualNumber
有没有什么有效的方法可以做到这一点?有没有Python或Pyspark的内置函数可以利用?

cunj1qz1

cunj1qz11#

你可以使用array_max来获取sourceSystemTimestamp,并使用它来过滤同一个数组以获取相应的individualNumber

df = (df.withColumn('max_time', 
                    F.array_max(
                        F.transform('idInfo', lambda x: x['lastUpdated']['sourceSystemTimestamp'])
                    ))
      .withColumn('max_number',
                  F.filter('idInfo', lambda x: x['lastUpdated']['sourceSystemTimestamp'] == F.col('max_time'))[0]['individualNumber']))

字符串

相关问题