瀏覽代碼

user base info

jch 1 月之前
父節點
當前提交
a34f807f08

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

@@ -39,7 +39,7 @@ public class ConvertUtils {
 
         // user feature
         FeatureTransform.getUserFeature(userOriginInfo, featMap);
-        FeatureTransform.getUserProfileFeature(userProfile, featMap);
+        FeatureTransform.getUserProfileFeature(userProfile, record, featMap);
 
         // user & video feature
         FeatureTransform.getUserTagsCrossVideoFeature("c5", rankInfo, userOriginInfo.get("alg_mid_feature_return_tags"), featMap);

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

@@ -27,6 +27,7 @@ public class FeatureTransform {
     private static final List<String> videoSimAttrs = Arrays.asList("title", "cate2", "cate2_list", "keywords");
     private static final List<String> hVideoSimAttrs = Arrays.asList("title");
     private static final List<String> cfList = Arrays.asList("share", "return");
+    private static final List<String> userAttrList = Arrays.asList("province", "city", "model", "brand", "system");
 
     public static void getContextFeature(long currentMs, Map<String, Double> featureMap) {
         Calendar calendar = Calendar.getInstance();
@@ -46,7 +47,7 @@ public class FeatureTransform {
         }
     }
 
-    public static void getUserProfileFeature(UserShareReturnProfile profile, Map<String, Double> featMap) {
+    public static void getUserProfileFeature(UserShareReturnProfile profile, Map<String, String> userInfo, Map<String, Double> featMap) {
         if (null != profile) {
             long s_pv = profile.getS_pv();              // share_pv(分享pv)
             long s_cnt = profile.getS_cnt();            // share_cnt(分享次数)
@@ -75,6 +76,17 @@ public class FeatureTransform {
                 featMap.put("c9_ros_minus", ros_minus);
             }
         }
+        if (null != userInfo && !userInfo.isEmpty()) {
+            for (String attr : userAttrList) {
+                if (userInfo.containsKey(attr)) {
+                    String value = userInfo.get(attr).trim().replaceAll("(\\s*|\t|:)", "_");
+                    if (!value.isEmpty()) {
+                        String key = String.format("%s@%s", attr, value.toLowerCase());
+                        featMap.put(key, 1.0);
+                    }
+                }
+            }
+        }
     }
 
     public static void getUserTagsCrossVideoFeature(String prefix, Map<String, String> videoInfo, Map<String, String> infoMap, Map<String, Double> featMap) {