我在使用Apache Spark處理一組規則時遇到的一個用例需要幫助。需要使用Apache Spark根據一組規則過濾記錄時需要幫助
由於實際數據有太多的領域,例如,你可以把數據如下圖所示(爲簡單起見給出JSON格式的數據),
records : [{
"recordId": 1,
"messages": [{"name": "Tom","city": "Mumbai"},
{"name": "Jhon","address": "Chicago"}, .....]
},....]
rules : [{
ruleId: 1,
ruleName: "rule1",
criterias: {
name: "xyz",
address: "Chicago, Boston"
}
}, ....]
我要匹配所有規則的所有記錄。這裏是僞代碼:
var matchedRecords = []
for(record <- records)
for(rule <- rules)
for(message <- record.message)
if(!isMatch(message, rule.criterias))
break;
if(allMessagesMatched) // If loop completed without break
matchedRecords.put((record.id, ruleId))
def isMatch(message, criteria) =
for(each field in crieteria)
if(field.value contains comma)
if(! message.field containsAny field.value)
return false
else if(!message.field equals field.value) // value doesnt contain comma
return false
return true // if loop completed that means all criterias are matched
有成千上萬的記錄包含成千上萬的消息,並且有這樣的規則hundreads。
解決此類問題的方法有哪些?任何特定的模塊都會有幫助,如(SparkSQL,Spark Mlib,Spark GraphX)?我需要使用任何第三方庫嗎?
方法1:
有無列表[規則] & RDD [記錄]
廣播列表[規則]因爲他們人數少。
將每條記錄與所有規則進行匹配。
仍然在這種情況下沒有parallize計算髮生匹配每條消息與標準。