我试图转换一个df,其中一个id是重复的,将其转换为一行id,并从优先级列表中获取值。
-----------
id | value
-----------
1 MV1
1 MV2
2 VPV
2 Others
优先级列表是:
1.“MV1”
1.“MV2”
1.“VPV”
1.“其他”
因此输出应为:
-----------
id | value
-----------
1 MV1
2 VPV
我试着创建一个列,并分配一个数值(mv 1-〉1 mv 2-〉2),然后用一个窗口函数对它进行排序,只取第一行,但我不认为这是一个很好的解决方案。
最佳的做法是什么?
我用scala作为语言。
2条答案
按热度按时间mccptt671#
我使用的技巧是在输入数据集和优先级(已排序)之间使用
join
。结果似乎与预期相符。
a6b3iqyw2#
我解决这个问题的方法是使用
withColumn
,row_number
和window
函数,结果很简单。工作方式和这里发布的另一个答案一样,但我想是一种更优化的方式。这样,您可以通过id设置优先级,然后使用
orderBy
子句选择每个优先级的第一个。干净高效:)