我在数据库中有一个表,其中有许多功能,每个功能都有自己的实际值和预测值,我们还有两列,即 Id_partner 和 Id_accounts。我的主要目标是获取每个帐户的每个功能的 RMSE 分数在每个合作伙伴中,我都使用 for 循环完成了这一任务,但是在 PySpark 中需要花费大量时间才能完成,是否有一种有效的方法可以在仅读取数据的同时借助查询直接完成此操作,这样我就可以获得 RMSE 分数每个合作伙伴的每个帐户。我的桌子是这样的
Actual_Feature_1 = Act_F_1
Predicted_Feature_1 = Pred_F_1
Actual_Feature_1 = Act_F_2
Predicted_Feature_1 = Pred_F_2
Run Code Online (Sandbox Code Playgroud)
表格1:
ID_PARTNER | ID_ACCOUNT | Act_F_1 | Pred_F_1 | Act_F_2 | Pred_F_2 |
4 | 24 | 10 | 12 | 22 | 20 |
4 | 24 | 11 | 13 | 23 | 21 |
4 | 24 | 11 | 12 | 24 | 23 |
4 | 25 | 13 | 15 | 22 | 20 |
4 | 25 | 15 | 12 | 21 | 20 |
4 | 25 | 15 | 14 | 21 | 21 |
4 | 27 | 13 | 12 | 35 | 32 |
4 | 27 | 12 | 16 | 34 | 31 |
4 | 27 | 17 | 14 | 36 | 34 |
5 | 301 | 19 | 17 | 56 | 54 |
5 | 301 | 21 | 20 | 58 | 54 |
5 | 301 | 22 | 19 | 59 | 57 |
5 | 301 | 24 | 22 | 46 | 50 |
5 | 301 | 25 | 22 | 49 | 54 |
5 | 350 | 12 | 10 | 67 | 66 |
5 | 350 | 12 | 11 | 65 | 64 |
5 | 350 | 14 | 13 | 68 | 67 |
5 | 350 | 15 | 12 | 61 | 61 |
5 | 350 | 12 | 10 | 63 | 60 |
7 | 420 | 51 | 49 | 30 | 29 |
7 | 420 | 51 | 48 | 32 | 30 |
7 | 410 | 49 | 45 | 81 | 79 |
7 | 410 | 48 | 44 | 83 | 80 |
7 | 410 | 45 | 43 | 84 | 81 |
Run Code Online (Sandbox Code Playgroud)
我需要这种格式的每个合作伙伴的每个帐户的 RMSE 分数
结果表:
ID_PARTNER | ID_ACCOUNT | FEATURE_1 | FEATURE_2 |
4 | 24 | rmse_score | rmse_score |
4 | 25 | rmse_score | rmse_score |
4 | 27 | rmse_score | rmse_score |
5 | 301 | rmse_score | rmse_score |
5 | 350 | rmse_score | rmse_score |
7 | 420 | rmse_score | rmse_score |
7 | 410 | rmse_score | rmse_score |
Run Code Online (Sandbox Code Playgroud)
注意:为此,我们需要通过查看上表(即实际表)来考虑 id_account 和 id_partner,我们看到 id_accounts 只能用于获取 rmse,但不同的 id_partner 可以拥有与其他合作伙伴相同的帐户。我需要一个 SQL 查询,在从数据库读取表时直接提供结果表。
是的,您可以在 SQL 中计算均方根误差。
SELECT ID_PARTNER, ID_ACCOUNT
, SQRT(Avg( POWER(Act_F_1 - Pred_F_1 , 2) ) ) as feature_1_rmse
FROM ...
GROUP BY ID_PARTNER, ID_ACCOUNT
Run Code Online (Sandbox Code Playgroud)