Apache spark 如何将spark dataframe列的最大值存储到变量中并使其递增

Apache spark 如何将spark dataframe列的最大值存储到变量中并使其递增,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我试图在spark dataframe中提取列“ID”的最大值,并在执行插入时递增 我可以打印最大值,但无法将其存储在变量中 max_id=df.agg({"ID":"max"}).collect()[0] print max_id["max(ID)"] id2 =max_id["max{"ID"}] throws error "SyntaxError: invalid syntax" 如何将其提取到变量中并递增。请指导我如何实现它考虑以下数据框架: l1 = [(1,2),(3,4),(5

我试图在spark dataframe中提取列“ID”的最大值,并在执行插入时递增

我可以打印最大值,但无法将其存储在变量中

max_id=df.agg({"ID":"max"}).collect()[0]
print max_id["max(ID)"]

id2 =max_id["max{"ID"}] throws error "SyntaxError: invalid syntax"

如何将其提取到变量中并递增。请指导我如何实现它

考虑以下数据框架:

l1 = [(1,2),(3,4),(5,6), (12,537)]

df1 = spark.createDataFrame(l1,['ID','col2'])

max_id=df1.agg({"ID":"max"}).collect()[0]
变量max_id是一个。您可以使用type()检查这一点:

输出:

<class 'pyspark.sql.types.Row'>
<class 'int'>
因此,您只需更改您的max_id分配:

max_id=df1.agg({"ID":"max"}).collect()[0]['max(ID)']
type(max_id)
输出:

<class 'pyspark.sql.types.Row'>
<class 'int'>

上面代码的问题是,您使用了花括号。

我知道如何将列的最大值提取为int

maxid=int(df.descripe(“ID”).filter(“summary='max'))。选择(“ID”).collect()[0]。asDict()['ID']

打印最大ID ---结果:3

id2=maxid+1 打印id2
---结果4

Hi Cronoik,谢谢你的回答,我现在能够在变量max_id中存储max value,当我打印增量时,我得到错误类型错误:强制使用Unicode:需要字符串或缓冲区,int found请显示你的打印。你可能正在尝试执行类似于
print('bla'+max_id)的操作
。这不起作用,因为python很少进行隐式转换。如果希望使用另一个字符串打印它,则必须将其转换为字符串:
print('bla'+str(max_id))
。max_id=DimDF.agg({“id”:“max”})。collect()[0]['max(id)]print max_id//result:3(列中的最大值)max_id=max_id+1打印max_id类型错误:强制使用Unicode:需要字符串或缓冲区,找到int我只是试图打印int值。max_id=DimDF.agg({“id”:“max”})的输出是否有效。collect()[0]['max(id)')导致int?我无法看到(max_id)的类型.type是python中的。它在pyspark中的等价物是什么?
max_id = max_id+1