【发布时间】:2022-08-24 16:06:39
【问题描述】:
我想根据以下逻辑将值从货币转换为货币:
#df1#
| id | from_curr | to_curr | Date | value_to_convert |
|---|---|---|---|---|
| 1 | AED | EUR | 2017-01-12 | 2000 |
| 1 | AED | EUR | 2018-03-20 | 189 |
| 2 | UAD | EUR | 2021-05-18 | 12.5 |
| 3 | DZD | EUR | 2017-01-12 | 130 |
| 4 | SEK | EUR | 2017-01-12 | 1000 |
| 5 | GNF | EUR | 2017-08-03 | 1300 |
| 6 | EUR | EUR | 2020-09-14 | 36 |
| 6 | EUR | EUR | 2020-09-14 | 22.50 |
df2:#currency_table#
| from_curr | To_curr | Date | rate_exchange |
|---|---|---|---|
| AED | EUR | 2017-01-01 | -5,123 |
| UAD | EUR | 2021-05-26 | -9.5 |
| AED | EUR | 2018-03-10 | -5,3 |
| DZD | EUR | 2017-01-01 | -6,12 |
| GNF | EUR | 2017-08-01 | -7,03 |
| SEK | EUR | 2017-01-29 | -12 |
我想创建一个 Pyspark 函数,该函数使用来自 currency_table 的 exchange_rate (通过查看与来自 currency 的日期组对应的 exchange_rate 数据帧)从 df1 转换 value_to_convert ,同时在 from_curr 字段和日期字段上加入两个数据帧,每个值都应转换为rate_exchange 从正确的日期得到 df3 之类的,但是这一次一个货币可能有两种汇率。
| id | from_curr | to_curr | Date | value_to_convert | converted_value |
|---|---|---|---|---|---|
| 1 | AED | EUR | 2017-01-12 | 2000 | 390 |
| 1 | AED | EUR | 2018-03-20 | 189 | 35,66 |
| 2 | UAD | EUR | 2021-05-18 | 12.5 | 1,31 |
| 3 | DZD | EUR | 2017-01-12 | 130 | 21,24 |
| 4 | SEK | EUR | 2017-01-12 | 1000 | 83,33 |
| 5 | GNF | EUR | 2017-08-03 | 1300 | 184,92 |
| 6 | EUR | EUR | 2020-09-14 | 36 | 36 |
| 6 | EUR | EUR | 2020-09-14 | 22.50 | 22.50 |
convert_value=(value_to_convert)/(|rate_exchange|)
-
这和this question of yours不一样吗?
-
不,实际上在这里我们可能有两个相同货币的汇率交换,并且一个 id 具有相同货币的多个值。
-
以前的条件不会处理它,因为表格是按货币连接的,并且选择了最接近 df1 中日期的日期的汇率?
-
没有以前的加入,例如欧元到欧元只有一个 id=6 的值,例如 36
-
我使用该解决方案得到了预期的结果
标签: python apache-spark pyspark apache-spark-sql