Используйте avg
во встроенной функции с предложением window
для этого случая.
Example:
df.show()
//+----------------+--------+
//|AverageLoginHour|employee|
//+----------------+--------+
//| 3.392265193| emp_1|
//| 2.833333333| emp_2|
//| 5.638888889| emp_3|
//| 6.909090909| emp_4|
//| 7.361445783| emp_5|
//+----------------+--------+
df.withColumn("Totalavg",avg(col("AverageLoginHour")).over()).
withColumn("Remarks",when(col("Totalavg") > col("AverageLoginHour"),lit("Below Avg")).otherwise(lit("Above Avg"))).
show()
//+----------------+--------+------------+---------+
//|AverageLoginHour|employee| Totalavg| Remarks|
//+----------------+--------+------------+---------+
//| 3.392265193| emp_1|5.2270048214|Below Avg|
//| 2.833333333| emp_2|5.2270048214|Below Avg|
//| 5.638888889| emp_3|5.2270048214|Above Avg|
//| 6.909090909| emp_4|5.2270048214|Above Avg|
//| 7.361445783| emp_5|5.2270048214|Above Avg|
//+----------------+--------+------------+---------+
//rounding to 1
df.withColumn("Totalavg",round(avg(col("AverageLoginHour")).over(),1)).withColumn("Remarks",when(col("Totalavg") > col("AverageLoginHour"),lit("Below Avg")).otherwise(lit("Above Avg"))).show()
//+----------------+--------+--------+---------+
//|AverageLoginHour|employee|Totalavg| Remarks|
//+----------------+--------+--------+---------+
//| 3.392265193| emp_1| 5.2|Below Avg|
//| 2.833333333| emp_2| 5.2|Below Avg|
//| 5.638888889| emp_3| 5.2|Above Avg|
//| 6.909090909| emp_4| 5.2|Above Avg|
//| 7.361445783| emp_5| 5.2|Above Avg|
//+----------------+--------+--------+---------+
Другой способ будет без с использованием оконной функции и использования crossJoin
.
Example:
val df1=df.selectExpr("avg(AverageLoginHour) as Totalavg")
df.crossJoin(df1).
withColumn("Remarks",when(col("Totalavg") > col("AverageLoginHour"),lit("Below Avg")).otherwise(lit("Above Avg"))).
show()
//+----------------+--------+------------+---------+
//|AverageLoginHour|employee| Totalavg| Remarks|
//+----------------+--------+------------+---------+
//| 3.392265193| emp_1|5.2270048214|Below Avg|
//| 2.833333333| emp_2|5.2270048214|Below Avg|
//| 5.638888889| emp_3|5.2270048214|Above Avg|
//| 6.909090909| emp_4|5.2270048214|Above Avg|
//| 7.361445783| emp_5|5.2270048214|Above Avg|
//+----------------+--------+------------+---------+