У меня есть датафрейм 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|
+-----+--------+----------+

И я хочу преобразовать каждый price в EUR и поместить в столбец price_eur в соответствии с указанным date.

+-----+--------+----------+---------+
|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.

4
Ala Tarighati 5 Окт 2018 в 09:57

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
3
mayank agrawal 5 Окт 2018 в 07:48