【问题标题】:Pyspark to map the exchange rate value in dataframe based on group of valuesPyspark根据一组值映射数据框中的汇率值
【发布时间】: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


【解决方案1】:

使用此处提出的解决方案https://stackoverflow.com/questions/73080342/pyspark-to-map-the-exchange-rate-value-in-dataframe 我得到以下输出:

您可以注意到@samkart,因为每个 ID 都有多个值要转换为同一日期,并且在进行分析之后,我注意到使用前一种方法的相同 ID 的转换值仅存储最小日期的值。

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多