Skip to content

Commit 194b9ac

Browse files
authored
Merge pull request #57 from aliyun/feature/fix_make_seq
fix: consider deduplication method when making sequence features
2 parents 19a838f + 227fa97 commit 194b9ac

File tree

2 files changed

+39
-12
lines changed

2 files changed

+39
-12
lines changed

dao/feature_view_dao.go

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,22 +92,53 @@ func makeSequenceFeatures(offlineSequences, onlineSequences []*sequenceInfo, seq
9292

9393
//produce seqeunce feature correspond to easyrec processor
9494
sequencesValueMap := make(map[string][]string)
95-
sequenceMap := make(map[string]bool)
95+
sequenceMap := make(map[string]struct{})
9696

9797
for _, seq := range onlineSequences {
98-
key := fmt.Sprintf("%s#%s", seq.itemId, seq.event)
98+
var key string
99+
switch sequenceConfig.DeduplicationMethodNum {
100+
case 1:
101+
key = fmt.Sprintf("%s#%s", seq.itemId, seq.event)
102+
case 2:
103+
key = fmt.Sprintf("%s#%s#%d", seq.itemId, seq.event, seq.timestamp)
104+
}
99105
if _, exist := sequenceMap[key]; !exist {
100-
sequenceMap[key] = true
106+
sequenceMap[key] = struct{}{}
101107
sequencesValueMap[sequenceConfig.ItemIdField] = append(sequencesValueMap[sequenceConfig.ItemIdField], seq.itemId)
102108
sequencesValueMap[sequenceConfig.TimestampField] = append(sequencesValueMap[sequenceConfig.TimestampField], fmt.Sprintf("%d", seq.timestamp))
103109
sequencesValueMap[sequenceConfig.EventField] = append(sequencesValueMap[sequenceConfig.EventField], seq.event)
104110
if sequenceConfig.PlayTimeField != "" {
105111
sequencesValueMap[sequenceConfig.PlayTimeField] = append(sequencesValueMap[sequenceConfig.PlayTimeField], fmt.Sprintf("%.2f", seq.playTime))
106112
}
107113
sequencesValueMap["ts"] = append(sequencesValueMap["ts"], fmt.Sprintf("%d", currTime-seq.timestamp))
108-
for k, v := range seq.onlineBehaviourTableFieldsMap {
109-
sequencesValueMap[k] = append(sequencesValueMap[k], v)
110-
}
114+
}
115+
}
116+
117+
properties := make(map[string]interface{})
118+
for key, value := range sequencesValueMap {
119+
curSequenceSubName := (seqConfig.OnlineSeqName + "__" + key)
120+
properties[curSequenceSubName] = strings.Join(value, ";")
121+
}
122+
properties[seqConfig.OnlineSeqName] = strings.Join(sequencesValueMap[sequenceConfig.ItemIdField], ";")
123+
124+
return properties
125+
126+
}
127+
128+
func makeSequenceFeatures4FeatureDB(sequencesInfos []*sequenceInfo, seqConfig *api.SeqConfig, sequenceConfig api.FeatureViewSeqConfig, currTime int64) map[string]interface{} {
129+
//produce seqeunce feature correspond to easyrec processor
130+
sequencesValueMap := make(map[string][]string)
131+
132+
for _, seq := range sequencesInfos {
133+
sequencesValueMap[sequenceConfig.ItemIdField] = append(sequencesValueMap[sequenceConfig.ItemIdField], seq.itemId)
134+
sequencesValueMap[sequenceConfig.TimestampField] = append(sequencesValueMap[sequenceConfig.TimestampField], fmt.Sprintf("%d", seq.timestamp))
135+
sequencesValueMap[sequenceConfig.EventField] = append(sequencesValueMap[sequenceConfig.EventField], seq.event)
136+
if sequenceConfig.PlayTimeField != "" {
137+
sequencesValueMap[sequenceConfig.PlayTimeField] = append(sequencesValueMap[sequenceConfig.PlayTimeField], fmt.Sprintf("%.2f", seq.playTime))
138+
}
139+
sequencesValueMap["ts"] = append(sequencesValueMap["ts"], fmt.Sprintf("%d", currTime-seq.timestamp))
140+
for k, v := range seq.onlineBehaviourTableFieldsMap {
141+
sequencesValueMap[k] = append(sequencesValueMap[k], v)
111142
}
112143
}
113144

dao/feature_view_featuredb_dao.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -979,18 +979,14 @@ func (d *FeatureViewFeatureDBDao) GetUserSequenceFeature(keys []interface{}, use
979979
eventWg.Add(1)
980980
go func(seqConfigs []*api.SeqConfig) {
981981
defer eventWg.Done()
982-
var onlineSequences []*sequenceInfo
983-
var offlineSequences []*sequenceInfo
984982

985983
// FeatureDB has processed the integration of online sequence features and offline sequence features
986984
// Here we put the results into onlineSequences
987985

988-
if onlineresult := fetchDataFunc(seqConfigs[0].SeqEvent, seqConfigs[0].SeqLen, key, seqConfigsBehaviorFields[0]); onlineresult != nil {
989-
onlineSequences = onlineresult
990-
}
986+
onlineSequences := fetchDataFunc(seqConfigs[0].SeqEvent, seqConfigs[0].SeqLen, key, seqConfigsBehaviorFields[0])
991987

992988
for _, seqConfig := range seqConfigs {
993-
subproperties := makeSequenceFeatures(offlineSequences, onlineSequences, seqConfig, sequenceConfig, currTime)
989+
subproperties := makeSequenceFeatures4FeatureDB(onlineSequences, seqConfig, sequenceConfig, currTime)
994990
mu.Lock()
995991
for k, value := range subproperties {
996992
properties[k] = value

0 commit comments

Comments
 (0)