【发布时间】:2021-05-01 09:22:17
【问题描述】:
我的数据集中有一列“price_map”,它是一个像这样的 HashMap:
(usd_price,100),
(eur_price,200),
(jpy_price,500)...
现在我想检索 usd_price 的价格值(即 100),当键 usd_price 存在于地图中时,并将其作为新行放入我的数据集中。
我尝试过这样的事情:
dataset = dataset.withColumn("usd_price", when(
size(map_keys(dataset.col(price_map))),
map_values(dataset.col(price_map))
.getField("usd_price"))
.otherwise(lit("no data"))
);
但它告诉我
org.apache.spark.sql.AnalysisException: cannot resolve 'map_values(`price_map`)['usd_price']' due to data type mismatch: argument 2 requires integral type, however, ''usd_price'' is of string type.;;
我想知道这样做的正确方法是什么?
【问题讨论】:
-
我不确定我是否理解为什么发布的答案没有给你你想要的。从评论中,您所说的“但我还需要确保此地图列
price_map存在”是什么意思?也许你可以澄清一下。
标签: java scala apache-spark dataset