Pyspark 货币转换器

All*_*ati 4 currency dataframe pyspark

我有一个df这样的数据框:

df.show()
Run Code Online (Sandbox Code Playgroud)

输出:

+-----+--------+----------+
|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|
+-----+--------+----------+
Run Code Online (Sandbox Code Playgroud)

我想根据指定将每个转换priceEUR并放入列price_eurdate

+-----+--------+----------+---------+
|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|
+-----+--------+----------+---------+
Run Code Online (Sandbox Code Playgroud)

有谁知道这样做的有效方法?

虽然有pandas数据帧,我可以简单地使用CurrencyConverter python API,但我找不到在pyspark.

may*_*wal 6

创建一个 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'))
Run Code Online (Sandbox Code Playgroud)

编辑:

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

pip install currencyconverter
Run Code Online (Sandbox Code Playgroud)

  • 该软件包也需要安装在所有工人身上。也许这就是问题所在。 (2认同)