Amazon web services Fidning pyspark中列表的最大/最小值

Amazon web services Fidning pyspark中列表的最大/最小值,amazon-web-services,pyspark,apache-spark-sql,Amazon Web Services,Pyspark,Apache Spark Sql,我知道这是一个非常琐碎的问题,我很惊讶我在互联网上找不到答案,但是你能在pyspark中找到列表的最大值或最小值吗? 在Python中,它很容易由 max(list) 但是,当我在pyspark中尝试同样的方法时,我得到以下错误: An error was encountered: An error occurred while calling z:org.apache.spark.sql.functions.max. Trace: py4j.Py4JException: Method max

我知道这是一个非常琐碎的问题,我很惊讶我在互联网上找不到答案,但是你能在pyspark中找到列表的最大值或最小值吗? 在Python中,它很容易由

max(list)
但是,当我在pyspark中尝试同样的方法时,我得到以下错误:

An error was encountered:
An error occurred while calling z:org.apache.spark.sql.functions.max. Trace:
py4j.Py4JException: Method max([class java.util.ArrayList]) does not exist
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:339)
    at py4j.Gateway.invoke(Gateway.java:276)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.lang.Thread.run(Thread.java:748)
你知道我做错了什么吗

更新:添加我到底做了什么: 这是我的清单:

当前日期列表

输出:

['2020-06-10', '2020-06-11', '2020-06-12', '2020-06-13', '2020-06-14', '2020-06-15', '2020-06-16', '2020-06-17', '2020-06-18', '2020-06-19', '2020-06-20', '2020-06-21', '2020-06-22', '2020-06-23', '2020-06-24', '2020-06-25', '2020-06-26', '2020-06-27', '2020-06-28', '2020-06-29', '2020-06-30', '2020-07-01', '2020-07-02', '2020-07-03', '2020-07-04', '2020-07-05', '2020-07-06', '2020-07-07', '2020-07-08', '2020-07-09', '2020-07-10', '2020-07-11', '2020-07-12', '2020-07-13', '2020-07-14', '2020-07-15', '2020-07-16', '2020-07-17', '2020-07-18', '2020-07-19', '2020-07-20', '2020-07-21', '2020-07-22', '2020-07-23', '2020-07-24', '2020-07-25', '2020-07-26', '2020-07-27', '2020-07-28', '2020-07-29', '2020-07-30', '2020-07-31', '2020-08-01', '2020-08-02', '2020-08-03', '2020-08-04', '2020-08-05', '2020-08-06', '2020-08-07', '2020-08-08', '2020-08-09', '2020-08-10', '2020-08-11', '2020-08-12', '2020-08-13', '2020-08-14', '2020-08-15', '2020-08-16', '2020-08-17', '2020-08-18', '2020-08-19', '2020-08-20', '2020-08-21', '2020-08-22', '2020-08-23', '2020-08-24', '2020-08-25', '2020-08-26', '2020-08-27', '2020-08-28', '2020-08-29', '2020-08-30', '2020-08-31']
该类为“列表”: 类型cur_日期列表

我认为这是一个正常的蟒蛇列表。
所以当我尝试maxcur_datelist时,我得到了上面提到的错误。

pyspark和python在列表方面没有什么不同,但是列是不同的。这是我的PypSpark的结果

# just a list
l = [1, 2, 3]
print(max(l))

# 3

# dataframe with the array column
df = spark.createDataFrame([(1, [1, 2, 3]), (2, [4, 5, 6])]).toDF('id', 'list')

import pyspark.sql.functions as f

df.withColumn('max', f.array_max(f.col('list'))).show()

#+---+---------+---+
#| id|     list|max|
#+---+---------+---+
#|  1|[1, 2, 3]|  3|
#|  2|[4, 5, 6]|  6|
#+---+---------+---+
您的错误来自python本机函数和spark列函数之间的max函数重叠!要避免这种情况,请指定pyspark函数。然后max表示python的原始版本

import pyspark.sql.functions as f

l = ['2020-06-10', '2020-06-11', '2020-06-12', '2020-06-13', '2020-06-14', '2020-06-15', '2020-06-16', '2020-06-17', '2020-06-18', '2020-06-19', '2020-06-20', '2020-06-21', '2020-06-22', '2020-06-23', '2020-06-24', '2020-06-25', '2020-06-26', '2020-06-27', '2020-06-28', '2020-06-29', '2020-06-30', '2020-07-01', '2020-07-02', '2020-07-03', '2020-07-04', '2020-07-05', '2020-07-06', '2020-07-07', '2020-07-08', '2020-07-09', '2020-07-10', '2020-07-11', '2020-07-12', '2020-07-13', '2020-07-14', '2020-07-15', '2020-07-16', '2020-07-17', '2020-07-18', '2020-07-19', '2020-07-20', '2020-07-21', '2020-07-22', '2020-07-23', '2020-07-24', '2020-07-25', '2020-07-26', '2020-07-27', '2020-07-28', '2020-07-29', '2020-07-30', '2020-07-31', '2020-08-01', '2020-08-02', '2020-08-03', '2020-08-04', '2020-08-05', '2020-08-06', '2020-08-07', '2020-08-08', '2020-08-09', '2020-08-10', '2020-08-11', '2020-08-12', '2020-08-13', '2020-08-14', '2020-08-15', '2020-08-16', '2020-08-17', '2020-08-18', '2020-08-19', '2020-08-20', '2020-08-21', '2020-08-22', '2020-08-23', '2020-08-24', '2020-08-25', '2020-08-26', '2020-08-27', '2020-08-28', '2020-08-29', '2020-08-30', '2020-08-31']
print(max(l))

# 2020-08-31
或者


您不只是调用org.apache.spark.sql.functions.max[1,2,3,4]之类的函数。max是一个以列为参数的数据帧函数。如果你有一个Python列表,像你那样调用内置函数。但是我的列表不在数据帧中,它只是一个简单的类列表,使用f.array_maxlist是不起作用的。为了使用array_max函数,我必须将它强制放入数据帧吗?我不明白你的意思。您的列表不是数据帧,那么它是一个普通列表,对吗?在我的回答中,maxl会起作用。我已经更新了我的问题,并添加了确切的列表和我尝试的内容。这不是一个真正的蟒蛇列表吗?最后,找出问题所在。max函数重叠。您可以使用另一种方式,将内置项作为py_builtin和py_buildin.max导入本机。
import builtins as p

print(p.max(l))
# 2020-08-31