jch 1 месяц назад
Родитель
Сommit
922f3a6d59

+ 4 - 1
src/main/scala/com/aliyun/odps/spark/examples/myUtils/ConvertUtils.java

@@ -26,6 +26,9 @@ public class ConvertUtils {
         // parse info
         Map<String, String> c9Map = userOriginInfo.get("alg_recsys_feature_user_share_return_stat");
         UserShareReturnProfile userProfile = JSON.parseObject(toJson(c9Map), UserShareReturnProfile.class);
+        if (null != userProfile) {
+            userProfile.list2map();
+        }
         Map<String, Map<String, String>> historyVideoMap = list2Map(videoSeq);
 
         Map<String, Map<String, String[]>> c7Map = FeatureTransform.parseUCFScore(userOriginInfo.get("alg_mid_feature_sharecf"));
@@ -51,7 +54,7 @@ public class ConvertUtils {
         FeatureTransform.getVideoBaseFeature("r", currentMs, rankInfo, featMap);
         FeatureTransform.getVideoFeature(vid, videoOriginInfo, featMap);
 
-        // head&rank cross feature
+        // head & rank cross feature
         FeatureTransform.getHeadRankVideoCrossFeature(headInfo, rankInfo, featMap);
 
         // user profile & rank cross

+ 4 - 4
src/main/scala/com/aliyun/odps/spark/examples/myUtils/FeatureTransform.java

@@ -186,10 +186,10 @@ public class FeatureTransform {
         if (null == rankVideo || rankVideo.isEmpty()) {
             return;
         }
-        getVideoAttrSRCrossFeature("c9_c1s", rankVideo.getOrDefault("merge_first_level_cate", ""), profile.getC1_s(), featMap);
-        getVideoAttrSRCrossFeature("c9_c2s", rankVideo.getOrDefault("merge_second_level_cate", ""), profile.getC2_s(), featMap);
-        getVideoAttrSRCrossFeature("c9_l1s", rankVideo.getOrDefault("festive_label1", ""), profile.getL1_s(), featMap);
-        getVideoAttrSRCrossFeature("c9_l2s", rankVideo.getOrDefault("festive_label2", ""), profile.getL2_s(), featMap);
+        getVideoAttrSRCrossFeature("c9_c1s", rankVideo.getOrDefault("merge_first_level_cate", ""), profile.getC1_m(), featMap);
+        getVideoAttrSRCrossFeature("c9_c2s", rankVideo.getOrDefault("merge_second_level_cate", ""), profile.getC2_m(), featMap);
+        getVideoAttrSRCrossFeature("c9_l1s", rankVideo.getOrDefault("festive_label1", ""), profile.getL1_m(), featMap);
+        getVideoAttrSRCrossFeature("c9_l2s", rankVideo.getOrDefault("festive_label2", ""), profile.getL2_m(), featMap);
     }
 
     private static void getRSCrossFeature(String prefix, long currentMs, int maxN, List<UserSRBO> list, Map<String, String> rankVideo, Map<String, Map<String, String>> hVideoMap, Map<String, Double> featMap) {

+ 24 - 16
src/main/scala/com/aliyun/odps/spark/examples/myUtils/UserShareReturnProfile.java

@@ -19,10 +19,14 @@ public class UserShareReturnProfile {
     private List<UserSRBO> m_r_s;   // max_return_seq(最大回流序列)
     private List<UserSRBO> l_s_s;    // last_share_seq(最近分享序列)
     private List<UserSRBO> l_r_s;   // last_return_seq(最近回流序列)
-    private Map<String, VideoAttrSRBO> c1_s;   // cate1_seq(merge_first_level_cate序列-回流率)
-    private Map<String, VideoAttrSRBO> c2_s;   // cate2_seq(merge_second_level_cate序列-回流率)
-    private Map<String, VideoAttrSRBO> l1_s;   // label1_seq(festive_label1序列-回流率)
-    private Map<String, VideoAttrSRBO> l2_s;   // label2_seq(festive_label2序列-回流率)
+    private List<VideoAttrSRBO> c1_s;   // cate1_seq(merge_first_level_cate序列-回流率)
+    private List<VideoAttrSRBO> c2_s;   // cate2_seq(merge_second_level_cate序列-回流率)
+    private List<VideoAttrSRBO> l1_s;   // label1_seq(festive_label1序列-回流率)
+    private List<VideoAttrSRBO> l2_s;   // label2_seq(festive_label2序列-回流率)
+    private Map<String, VideoAttrSRBO> c1_m;   // cate1_map(merge_first_level_cate序列-回流率)
+    private Map<String, VideoAttrSRBO> c2_m;   // cate2_map(merge_second_level_cate序列-回流率)
+    private Map<String, VideoAttrSRBO> l1_m;   // label1_map(festive_label1序列-回流率)
+    private Map<String, VideoAttrSRBO> l2_m;   // label2_map(festive_label2序列-回流率)
 
     public void setM_s_s(String data) {
         this.m_s_s = JSON.parseArray(data, UserSRBO.class);
@@ -41,30 +45,34 @@ public class UserShareReturnProfile {
     }
 
     public void setC1_s(String data) {
-        this.c1_s = parseVideoAttrSR(data);
+        this.c1_s = JSON.parseArray(data, VideoAttrSRBO.class);
     }
 
     public void setC2_s(String data) {
-        this.c2_s = parseVideoAttrSR(data);
+        this.c2_s = JSON.parseArray(data, VideoAttrSRBO.class);
     }
 
     public void setL1_s(String data) {
-        this.l1_s = parseVideoAttrSR(data);
+        this.l1_s = JSON.parseArray(data, VideoAttrSRBO.class);
     }
 
     public void setL2_s(String data) {
-        this.l2_s = parseVideoAttrSR(data);
+        this.l2_s = JSON.parseArray(data, VideoAttrSRBO.class);
     }
 
-    private Map<String, VideoAttrSRBO> parseVideoAttrSR(String data) {
+    public void list2map() {
+        this.c1_m = list2map(this.c1_s);
+        this.c2_m = list2map(this.c2_s);
+        this.l1_m = list2map(this.l1_s);
+        this.l2_m = list2map(this.l2_s);
+    }
+
+    private Map<String, VideoAttrSRBO> list2map(List<VideoAttrSRBO> list) {
         Map<String, VideoAttrSRBO> map = new HashMap<>();
-        if (null != data && !data.isEmpty()) {
-            List<VideoAttrSRBO> list = JSON.parseArray(data, VideoAttrSRBO.class);
-            if (null != list) {
-                for (VideoAttrSRBO v : list) {
-                    if (null != v) {
-                        map.put(v.getNa(), v);
-                    }
+        if (null != list) {
+            for (VideoAttrSRBO v : list) {
+                if (null != v) {
+                    map.put(v.getNa(), v);
                 }
             }
         }