소스 검색

添加详情页

jch 1 일 전
부모
커밋
f4b5cda2f5

+ 8 - 2
src/main/scala/com/aliyun/odps/spark/examples/makedata_recsys_r_rate/makedata_recsys_83_originData_20250317.scala

@@ -152,7 +152,7 @@ object makedata_recsys_83_originData_20250317 {
         })
 
       // 2.4 加载样本数据
-      val pageSet = Set("详情后沉浸页", "回流后沉浸页&内页feed", "首页feed")
+      val pageSet = Set("详情后沉浸页", "回流后沉浸页&内页feed", "首页feed", "详情页")
       val odpsData = DataUtils.getODPSData(sc, project, table, partition, tablePart)
         .filter(record => {
           val page = getStringValue(record, "page")
@@ -161,9 +161,15 @@ object makedata_recsys_83_originData_20250317 {
 
       // 2.5 样本重采样
       val filterColumns = Set("allfeaturemap", "metafeaturemap")
+      val onlineKeys = Set("head_video")
       val resampleData = DataUtils.resampleWithoutInterception(whatLabel, fuSampleRate, odpsData)
         .map(record => {
-          ConvertUtils.record2Map(record, filterColumns)
+          val map = ConvertUtils.record2Map(record, filterColumns, onlineKeys)
+          val page = map.getOrElse("page", "")
+          if (page.equals("详情页") && map.containsKey("head_video")) {
+            map.put("v2_feature", map.get("head_video"))
+          }
+          map
         })
 
       // 2.6 join video stat

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

@@ -87,6 +87,41 @@ public class ConvertUtils {
         return map;
     }
 
+    public static Map<String, String> record2Map(Record record, Set<String> filterColumns, Set<String> onlineKeys) {
+        Map<String, String> map = new HashMap<>();
+        if (null != record) {
+            Column[] columns = record.getColumns();
+            if (null != columns) {
+                for (Column column : columns) {
+                    String name = column.getName();
+                    if (filterColumns.contains(name)) {
+                        if (name.equals("metafeaturemap")) {
+                            String data = record.getString(name);
+                            if (null != data && data.length() > 4) {
+                                JSONObject json = JSON.parseObject(data);
+                                if (null != json) {
+                                    for (String key : onlineKeys) {
+                                        if (json.containsKey(key)) {
+                                            String value = json.getString(key);
+                                            if (null != value && value.length() > 4) {
+                                                map.put(key, value);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        continue;
+                    }
+                    if (!record.isNull(name)) {
+                        map.put(name, record.getString(name));
+                    }
+                }
+            }
+        }
+        return map;
+    }
+
     public static Map<String, Map<String, String>> list2Map(List<Map<String, String>> videSeq) {
         Map<String, Map<String, String>> map = new HashMap<>();
         if (null != videSeq && !videSeq.isEmpty()) {