Я думаю, что это ошибка с функцией Round в Pyspark, но, пожалуйста, помогите мне понять, если нет.
Я добавил столбец, используя функцию withColumn
, как показано ниже:
@udf('float')
def try_dvd_by_zero(Base_salary,working_days,gt_7000_ind):
if gt_7000_ind==0:
try:
return round(Base_salary+(Base_salary/working_days),2)
except ZeroDivisionError as e:
return 0.0
elif gt_7000_ind==1:
try:
return round(Base_salary-(Base_salary/working_days),2)
except ZeroDivisionError as e:
return 0.0
df=df.withColumn('Actual_Salary', when(col('working_days')<7000,try_dvd_by_zero(col('Base_salary'),col('working_days'),lit(0)))
.otherwise(when(col('working_days')>7000,try_dvd_by_zero(col('Base_salary'),col('working_days'),lit(1)))))
Это возвращает правильное значение округления:
+-----------+-------+------------+--------------+--------------------+------------------+------------+------------+-----------+-------------+
|Employee_id| Skills|Joining_Date|Num_of_project|Next_Gen_eligibility|eligible_promotion|Careel_Level|working_days|Base_salary|Actual_Salary|
+-----------+-------+------------+--------------+--------------------+------------------+------------+------------+-----------+-------------+
| 10000001| aws| 26Jun2005| 4| no| no| L1| 5313| 33330| 33336.27|
| 10000002|pyspark| 03Feb2007| 9| no| no| L4| 4726| 16665| 16668.53|
+-----------+-------+------------+--------------+--------------------+------------------+------------+------------+-----------+-------------+
Но затем, когда я пытаюсь сделать это:
df2=df.withColumn('Update_Ind',when((col('Actual_Salary')<df_max_min.collect()[0][1]+5000)&(col('Actual_Salary')>0.0),lit(1)).otherwise(lit(0)))\
.withColumn('Actual_Salary',when(col('Update_Ind')==1, df['Actual_Salary']*1.25).otherwise(df['Actual_Salary']))
Он снова возвращает необоснованное значение ... Почему ??