Функция раунда в PySpark - PullRequest
       0

Функция раунда в PySpark

0 голосов
/ 12 января 2020

Я думаю, что это ошибка с функцией 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']))

Он снова возвращает необоснованное значение ... Почему ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...