Pyspark 货币转换器

Posted

技术标签:

【中文标题】Pyspark 货币转换器【英文标题】:Pyspark Currency Converter 【发布时间】:2018-10-05 06:57:53 【问题描述】:

我有一个这样的数据框df

df.show()

输出:

+-----+--------+----------+
|price|currency|      date|
+-----+--------+----------+
|   10|     USD|2018-07-03|
|   10|     USD|2018-03-19|
|    8|     SEK|2018-07-10|
|   10|     NOK|2018-05-25|
|    5|     EUR|2018-05-13|
+-----+--------+----------+

我想根据指定的date 将每个price 转换为EUR 并放入price_eur 列。

+-----+--------+----------+---------+
|price|currency|      date|price_eur|
+-----+--------+----------+---------+
|   10|     USD|2018-07-03|     8.57|
|   10|     USD|2018-03-18|     8.12|
|    8|     SEK|2018-07-10|     0.78|
|   10|     NOK|2018-05-25|     1.05|
|    5|     EUR|2018-05-13|        5|
+-----+--------+----------+---------+

有没有人知道这样做的有效方法?

虽然拥有pandas 数据框,但我可以简单地使用CurrencyConverter python API,但在pyspark 中找不到方法。

【问题讨论】:

【参考方案1】:

创建一个 udf 并使用相同的 API。

from currency_converter import CurrencyConverter
import pyspark.sql.functions as F
from pyspark.sql.types import FloatType

c = CurrencyConverter()
convert_curr = F.udf(lambda x,y : c.convert(x, y, 'EUR'), FloatType())
df = df.withColumn('price_eur', convert_curr('price', 'currency'))

编辑:

首先使用以下命令安装python包,

pip install currencyconverter

【讨论】:

谢谢。但我不能让它工作:ModuleNotFoundError: No module named 'currency_converter'. 您必须先安装 api(我假设您已经安装了)。检查编辑。 是的,我将它用于 pandas 数据框。但是,我想,从中创建udf 似乎很棘手。 udf 只是让您可以访问每一行数据框。在udf 中,您可以像在pandas 中一样使用python 的任何函数、包或库。现在可以用了吗? 这个包也需要安装在所有worker上。也许这就是这里的问题。

以上是关于Pyspark 货币转换器的主要内容,如果未能解决你的问题,请参考以下文章

Java中的货币转换器具有精度和浓缩问题

如何使方法 JSON 可序列化以在自定义 Pyspark 转换器中使用

pySpark 数据框转换性能

在 Laravel 网站上需要一个货币转换器 [关闭]

将列表转换为 pyspark 数据框

UNIRest 目标 c 货币转换器 Api