Pyspark 在Spark数据帧的列表中查找最大值

Pyspark 在Spark数据帧的列表中查找最大值,pyspark,Pyspark,我想在列表中找到最大值。你在Pypark是怎么做到的 df = spark.createDataFrame([(1, [4,1]), (2, [4,5]), (3, [4,0])], ["A", "B"]) df.show() +---+------+ | A| B| +---+------+ | 1|[4, 1]| | 2|[4, 5]| | 3|[4, 0]| +---+------+ 在下面的示例中,如何在每一行中找到B列列表中的

我想在列表中找到最大值。你在Pypark是怎么做到的

df = spark.createDataFrame([(1, [4,1]), (2, [4,5]), (3, [4,0])], ["A", "B"])
df.show()

+---+------+
|  A|     B|
+---+------+
|  1|[4, 1]|
|  2|[4, 5]|
|  3|[4, 0]|
+---+------+
在下面的示例中,如何在每一行中找到B列列表中的最大值。因此:

  • 第1行-->4
  • 第2行-->第5行
  • 第3行-->第4行

您可以使用聚合功能

df = spark.createDataFrame([(1, [4,1, 4, 54,4, 2,2, 7,14, 23,74,53]), (2, [4,5, 11, 3,45, 34, 2,3, 4]), (3, [4,0, 32, 23,23, 5,23,2 ,37,8, 6,54, 54])], ["A", "B"])

from pyspark.sql.functions import *

df.withColumn('Max', expr('aggregate(B, 0L, (a, b) -> if(a < b, b, a))')).show(3, False)

+---+----------------------------------------------+---+
|A  |B                                             |Max|
+---+----------------------------------------------+---+
|1  |[4, 1, 4, 54, 4, 2, 2, 7, 14, 23, 74, 53]     |74 |
|2  |[4, 5, 11, 3, 45, 34, 2, 3, 4]                |45 |
|3  |[4, 0, 32, 23, 23, 5, 23, 2, 37, 8, 6, 54, 54]|54 |
+---+----------------------------------------------+---+
df=spark.createDataFrame([(1[4,1,4,54,4,2,2,7,14,23,74,53]),(2[4,5,11,3,45,34,2,3,4]),(3[4,0,32,23,23,5,23,2,37,8,6,54,54]),[“A”,“B”]
从pyspark.sql.functions导入*
df.with column('Max',expr('aggregate(B,0L,(a,B)->if(a

请注意
0L
是长类型,您应该将该类型与数组的元素相匹配。

这似乎有效。但我不知道它到底是做什么的:-)


它能更通用吗?问题是,列表的长度可以不同,也可以很长。它已经是通用的,a和b不是4和1,但a是最大值,直到前一个,b是当前值并迭代。我得到一个错误。ParseException:u“\nextranous input'>'应为{”(','SELECT','FROM','ADD','AS','ALL','DISTINCT','WHERE','GROUP','BY','GROUPING','SETS','CUBE','ROLLUP','ORDER','HAVING','LIMIT','AT','OR',…}(第1行,位置25)\n\n==SQL=\naggegate(B,0L,(a,B)->if(aarray\u max怎么样:
df.选择(“A”,array\u max(“B”).别名(“B”).show()
def my_max(s):
    return max(s)

from pyspark.sql.types import DateType
my_max2 = F.udf(my_max, DateType())


df.withColumn("mymax", my_max2("B"))