如何将Spark DataFrame列的最大值存储到变量中并对其进行递增

时间:2019-04-10 06:56:50

标签: apache-spark pyspark apache-spark-sql

我正在尝试在spark数据框中提取列“ ID”的最大值,并在执行插入操作时将其递增

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

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

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

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

2 个答案:

答案 0 :(得分:0)

请考虑以下数据框:

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是pyspark.sql.types.Row。您可以使用type()进行检查:

type(max_id)

输出:

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

可以像访问带有方括号的字典一样访问pyspark.sql.types.Row的元素:

max_id['max(ID)']

因此,您只需更改max_id分配即可:

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

输出:

<class 'int'>

max_id现在是一个可以增加的整数:

max_id = max_id+1

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

答案 1 :(得分:0)

我想出了如何将列的最大值提取为int。

maxid = int(df.describe(“ ID”)。filter(“ summary ='max'”)。select(“ ID”)。collect()[0] .asDict()['ID'] < / p>

打印上限 -结果:3

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