Procházet zdrojové kódy

外部引流特征

jch před 4 týdny
rodič
revize
a7ee953f8c

+ 9 - 4
src/main/scala/com/aliyun/odps/spark/examples/makedata_recsys_r_rate/makedata_recsys_83_originData_20250317.scala

@@ -23,16 +23,21 @@ object makedata_recsys_83_originData_20250317 {
     "is_return_n_noself", "return_n_uv_noself"
   )
   private val o2oMap = Map(
+    "creative" -> "creativeInfo"
+  )
+  private val detailPageO2OMap = Map(
     "d1_feature" -> "scene_type_vid_cf_feature_20250212",
     "d2_feature" -> "vid_click_cf_feature_20250212",
     "d3_feature" -> "alg_recsys_feature_cf_i2i_v2",
-    "v2_feature" -> "head_video"
+    "v2_feature" -> "head_video",
+    "creative" -> "creativeInfo"
   )
   private val returnPageO2OMap = Map(
     "d1_feature" -> "null1",
     "d2_feature" -> "null2",
     "d3_feature" -> "null3",
-    "v2_feature" -> "null4"
+    "v2_feature" -> "null4",
+    "creative" -> "creativeInfo"
   )
 
   private def parseVideoRdd(videoRdd: RDD[Record]): RDD[(String, java.util.Map[String, String])] = {
@@ -252,11 +257,11 @@ object makedata_recsys_83_originData_20250317 {
         .map(record => {
           val page = getStringValue(record, "page")
           if (page.equals("详情页")) {
-            OnlineLogUtils.log2Map(record, o2oMap)
+            OnlineLogUtils.log2Map(record, detailPageO2OMap)
           } else if (page.equals("回流页")) {
             OnlineLogUtils.log2Map(record, returnPageO2OMap)
           } else {
-            ConvertUtils.record2Map(record, filterColumns)
+            OnlineLogUtils.log2Map(record, o2oMap)
           }
         })
 

+ 2 - 0
src/main/scala/com/aliyun/odps/spark/examples/myUtils/ConvertV2.java

@@ -24,6 +24,7 @@ public class ConvertV2 {
         record.put("user_level", FeatureUtils.getUserLevel(extendMap.get("rootsessionid"), record.get("subsessionid")));
         Map<String, String> headInfo = ConvertUtils.getRecordCol(record, "v2_feature");
         Map<String, String> rankInfo = ConvertUtils.getRecordCol(record, "v1_feature");
+        Map<String, String> creativeInfo = ConvertUtils.getRecordCol(record, "creative");
         Map<String, Map<String, String>> userOriginInfo = getUserOriginInfo(record);
         Map<String, Map<String, Map<String, String>>> videoOriginInfo = getVideoOriginInfo(record);
 
@@ -58,6 +59,7 @@ public class ConvertV2 {
 
         // head&rank cross feature
         FeatureTransformV2.getHeadRankVideoCrossFeature(headInfo, rankInfo, featMap);
+        FeatureTransformV2.getCreativeFeature("e1", creativeInfo, rankInfo, featMap);
 
         // user profile & rank cross
         FeatureTransformV2.getProfileVideoCrossFeature(currentMs, userProfile, rankInfo, historyVideoMap, featMap);

+ 15 - 0
src/main/scala/com/aliyun/odps/spark/examples/myUtils/FeatureTransformV2.java

@@ -30,6 +30,7 @@ public class FeatureTransformV2 {
     private static final List<String> videoCateAttrs = Arrays.asList(FeatureUtils.cate1Attr, FeatureUtils.cate2Attr, FeatureUtils.festive1Attr,
             FeatureUtils.channelAttr, FeatureUtils.sourceAttr, FeatureUtils.uidAttr, FeatureUtils.mergeCate1Attr, FeatureUtils.mergeCate2Attr);
     private static final List<String> videoSimAttrs = Arrays.asList("title", "cate2", "cate2_list", "keywords");
+    private static final List<String> creativeSimAttrs = Arrays.asList("title");
     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", "user_channel", "user_level");
@@ -245,6 +246,20 @@ public class FeatureTransformV2 {
         getTwoVideoCrossFeature("hr_sim", videoSimAttrs, headInfo, rankInfo, featMap);
     }
 
+    public static void getCreativeFeature(String prefix, Map<String, String> creativeInfo, Map<String, String> rankInfo, Map<String, Double> featMap) {
+        if (null == creativeInfo || creativeInfo.isEmpty()) {
+            return;
+        }
+        if (creativeInfo.containsKey("ghId")) {
+            String ghId = creativeInfo.get("ghId");
+            if (null != ghId && !ghId.isEmpty()) {
+                String key = String.format("%s@%s", prefix, ghId);
+                featMap.put(key, 1.0);
+            }
+        }
+        getTwoVideoCrossFeature(prefix, creativeSimAttrs, creativeInfo, rankInfo, featMap);
+    }
+
     public static void getProfileVideoCrossFeature(long currentMs, UserShareReturnProfile profile, Map<String, String> rankVideo, Map<String, Map<String, String>> hVideoMap, Map<String, Double> featMap) {
         if (null == profile) {
             return;