Spark-Scala UDF自定义转换

时间:2017-01-25 02:07:16

标签: scala apache-spark

确定争用/违反特定规则的行的最佳方法是什么?

我有一个数据框,代表可以出售的商店/商品的组合。这里商店可能有许多商品,商品可能在许多商店。例如:

Row Store    Item       Price  Warehouse    Zone  Status
1, Store-1, Basketball, 5.99,   21,         Z1,    Active
2, Store-1, Football,   6.99,   21,         Z2,    Active
3, Store-2, Basketball  5.99,   21,         Z1,    Active
4, Store-1, Basketball  4.99,   22,         Z1,    Not-Active

目标是选择商店/商品组合,但有时特定商店/商品组合有很多选择。关于选择哪种组合,有特定的规则。所有列出的转换都适用于数据框中的所有行,但我只想关注存在争用的行。在这里它将是1& 4。

数据框中将有数百万行。数据框中的大多数项目都是单例(从而使选择变得简单),但对于某些项目来说,选择变得更加困难,因为规则是分层的,即比较采购区域,比较状态,比较价格,以及它们是否全部等于选择你遇到的第一个。

寻找想法或建议。

1 个答案:

答案 0 :(得分:0)

过滤和减少怎么样?

假设数据框为df,组合为store/item,并且您有一个函数compare,它确定两行中较好的一个。代码是

def compare(row1: Row, row2: Row): Row
df.filter($"Store" === store && $"Item" === item).reduce(compare)