dataframe - Pyspark 货币转换器
问题描述
我有一个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
。
解决方案
创建一个 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
推荐阅读
- r - 将链接观察的长表转换为宽邻接矩阵
- java - LDAP 是否在 ActiveDirectory 环境中工作?
- oracle - Spring Batch JpaPagingItemReader:如何设置查询提示?
- java - rsyslog 多行事件 java 堆栈跟踪发送到 tcp 侦听器
- hadoop - 你如何将oracle表导入hive表
- elasticsearch - Elasticsearch 多前缀查询或匹配
- javascript - 从反应应用程序中的字符串创建下拉列表选项
- c++ - 在向量 C++14 中的结构内的联合中创建和存储字符串(无限制联合)
- php - 连接查询中的列以使用“LIKE”运算符
- xml - 根据 XSD 中的属性值限制元素的出现次数可能吗?