2017-01-25 73 views
0

確定爭用/違反特定規則的行的最佳方式是什麼?Spark-Scala UDF自定義轉換

我有一個數據框表示可以出售的商店/物品的組合。這裏一家商店可能有許多商品,而一件商品可能在許多商店中。例如:

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.

數據幀中會有數百萬行。數據框中的大多數項目都是單例(從而使選擇變得容易),但對於一些選擇會變得更加困難,因爲規則是分層的,即比較採購區域,比較狀態,比較價格以及是否全部平等選擇你遇到的第一個。

尋找想法或建議。

+0

你問你是否應該使用udf來解決這個問題? – marios

回答

0

如何過濾和減少?

假定數據幀爲df,組合爲store/item,並且您有一個函數compare,它可以確定兩行中較好的一個。代碼將是

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