我正在尝试在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"
如何将其提取到变量中并递增。请指导我如何实现
答案 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