在PySpark列的列表列表中获取第一个元素的最大值

算法

我有一个带有这样的列表列表值的PySpark列

row 1: [['01', '100.0'], ['01', '400.0'], [None, '0.0'], ['06', '0.0'], ['01', '300'], [None, '0.0'], ['06', '200.0']]
row 2: [[None, '200.0'], ['06', '300.0'], ['01', '500'], ['06', '100.0'], ['01', '200'], ['07', '50.0']]

我需要比较列表中第一个元素相同的元素,并过滤掉每对中第二个元素最大的数组。尽管数组的第一个元素可能具有不同的代码,但我想过滤出包含'01','06'或'07'的数组元素,并在数据框中添加两列。

因此,上面的示例行的结果如下所示:

[['01', '400.0'], ['06', '200.0'], ['07':'0']
[['01', '500.0'], ['06', '300.0'], ['07':'50']

最有效的方法是什么?

在此处输入图片说明

Murtihash

应该这样做:

from pyspark.sql import functions as F

df.withColumn("Max_01",F.when(F.size(F.expr("""filter(arr,x-> exists(x,y->y='01'))"""))!=0,
       F.expr("""array_max(transform(filter(arr, x-> exists(x,y-> y='01')),z-> float(z[1])))"""))\
             .otherwise(F.lit(0)))\
  .withColumn("Max_06",F.when(F.size(F.expr("""filter(arr,x-> exists(x,y->y='06'))"""))!=0,
       F.expr("""array_max(transform(filter(arr, x-> exists(x,y-> y='06')),z-> float(z[1])))"""))\
             .otherwise(F.lit(0)))\
  .withColumn("Max_07",F.when(F.size(F.expr("""filter(arr,x-> exists(x,y->y='07'))"""))!=0,
       F.expr("""array_max(transform(filter(arr, x-> exists(x,y-> y='07')),z-> float(z[1])))"""))\
             .otherwise(F.lit(0)))\
   .show(truncate=False)

#+---------------------------------------------------------------------------------+------+------+------+
#|arr                                                                              |Max_01|Max_06|Max_07|
#+---------------------------------------------------------------------------------+------+------+------+
#|[[01, 100.0], [01, 400.0], [, 0.0], [06, 0.0], [01, 400.0], [, 0.0], [06, 200.0]]|400.0 |200.0 |0.0   |
#|[[, 200.0], [06, 300.0], [01, 500], [06, 100.0], [01, 200], [07, 50.0]]          |500.0 |300.0 |50.0  |
#+---------------------------------------------------------------------------------+------+------+------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python-根据内部列表的第一个元素对列表列表中的元素求和

从Prolog列表列表中的每个列表中删除第一个元素的最佳方法?

从tcl中的列表列表创建第一个元素的列表

从列表列中的每个列表中获取第一个元素

Ansible从列表中获取第一个元素

在Python的列表列表中查找第一个元素的总和

提取列表中列表的第一个元素

Python-如何替换列表列表中每个列表的第一个元素

如果属性等于值,则获取列表中的第一个元素-VUE.js

将列表列表转换为单个数据框,其中第一列由R中的第一个值(对于每个列表)填充

在dplyr中汇总列表列,获取第一个值

从另一个列表中的列表中的对象获取最大值[C#]

根据给定的第一个元素从列表列表中检索列表

按内部列表的第一个元素对列表列表进行排序(Java或groovy)

获取列表列表中的上一个元素

如何将列表列表隐藏到数据框中并使列表的第一个元素作为索引

元组列表中每个第一个元素的 scala 获取第二个元素的最大值

基于第一个元素在列表列表中对列表进行分组

从列表列表中获取每个第一个元素

在 Python 中定义列表列表的第一个元素

删除列表列表的第一个元素,压缩列表列表?元素太多?

根据子列表的第一个元素拆分子列表列表

合并从第一个列表中的某个元素开始的列表列表

列表/嵌套列表中的第一个元素

获取 Python 列表列表中第一个元素的索引

如何从java中的列表列表中获取第一个值

匹配python中两个列表列表之间的第一个元素

如果第一个和第二个元素相同,则查找列表列表的最大值

如何获取列表中的第一个值