zhangbo 1 yıl önce
ebeveyn
işleme
8f9d89fd34

+ 1 - 1
pom.xml

@@ -46,7 +46,7 @@
         <dependency>
             <groupId>com.tzld.piaoquan</groupId>
             <artifactId>recommend-feature-client</artifactId>
-            <version>1.0.2</version>
+            <version>1.0.0</version>
         </dependency>
 
         <dependency>

+ 60 - 0
src/main/java/examples/dataloader/OfflineVlogFeatureGroup.java

@@ -0,0 +1,60 @@
+package examples.dataloader;
+
+public enum OfflineVlogFeatureGroup {
+
+    machineinfo_brand,
+    machineinfo_model,
+    machineinfo_platform,
+    machineinfo_system,
+    u_1day_exp_cnt,
+    u_1day_click_cnt,
+    u_1day_share_cnt,
+    u_1day_return_cnt,
+    u_ctr_1day,
+    u_str_1day,
+    u_rov_1day,
+    u_ros_1day,
+    i_title_len,
+    total_time,
+    i_days_since_upload,
+    play_count_total,
+    i_1day_exp_cnt,
+    i_1day_click_cnt,
+    i_1day_share_cnt,
+    i_1day_return_cnt,
+    i_ctr_1day,
+    i_str_1day,
+    i_rov_1day,
+    i_ros_1day,
+    ctx_week,
+    ctx_hour,
+    ctx_region,
+    ctx_city,
+    ;
+
+
+    private final byte[] idBytes;
+    private final byte[] nameBytes;
+
+    OfflineVlogFeatureGroup() {
+        this.idBytes = String.valueOf(ordinal()).getBytes();
+        this.nameBytes = name().toLowerCase().getBytes();
+    }
+
+    public final int getId() {
+        return ordinal();
+    }
+
+    public final String getGroupName() {
+        return name().toLowerCase();
+    }
+
+    public final byte[] getGroupNameBytes() {
+        return getGroupName().getBytes();
+    }
+
+    public final byte[] getIdBytes() {
+        return idBytes;
+    }
+
+}

+ 56 - 0
src/main/java/examples/dataloader/OfflineVlogShareLRFeatureExtractor.java

@@ -0,0 +1,56 @@
+package examples.dataloader;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ListMultimap;
+import com.tzld.piaoquan.recommend.feature.domain.video.feature.BytesGroup;
+import com.tzld.piaoquan.recommend.feature.domain.video.feature.BytesUtils;
+import com.tzld.piaoquan.recommend.feature.gen.recommend.BaseFeature;
+import com.tzld.piaoquan.recommend.feature.gen.recommend.FeatureGroup;
+
+import java.util.Map;
+
+public class OfflineVlogShareLRFeatureExtractor {
+
+    public ListMultimap<FeatureGroup, BaseFeature> featureMap = ArrayListMultimap.create();
+
+    private BytesUtils utils;
+    public OfflineVlogShareLRFeatureExtractor() {
+        BytesGroup[] groups = new BytesGroup[OfflineVlogFeatureGroup.values().length];
+        OfflineVlogFeatureGroup[] var2 = OfflineVlogFeatureGroup.values();
+        int var3 = var2.length;
+
+        for(int var4 = 0; var4 < var3; ++var4) {
+            OfflineVlogFeatureGroup g = var2[var4];
+            groups[g.ordinal()] = new BytesGroup(g.ordinal(), g.getGroupName(), g.getGroupNameBytes());
+        }
+        this.utils = new BytesUtils(groups);
+    }
+    public void makeFeature(Map<String, Object> maps){
+        for (Map.Entry<String, Object> entry : maps.entrySet()){
+            OfflineVlogFeatureGroup ovf = OfflineVlogFeatureGroup.valueOf(entry.getKey());
+            Object value = entry.getValue();
+            if (value instanceof String){
+                this.makeFea(ovf, ((String)value).getBytes());
+            }else if (value instanceof Double){
+                this.makeFea(ovf, String.valueOf((Double)value).getBytes());
+            }else if (value instanceof Integer){
+                //todo
+            }else{
+                //todo
+                this.makeFea(ovf, ((String)value).getBytes());
+            }
+        }
+    }
+
+    private FeatureGroup makeGroup(OfflineVlogFeatureGroup group) {
+        FeatureGroup.Builder g = FeatureGroup.newBuilder();
+        g.setType("1");
+        g.setName(group.getGroupName());
+        g.setId(group.ordinal());
+        return g.build();
+    }
+    void makeFea(OfflineVlogFeatureGroup group, byte[] value) {
+        FeatureGroup featureGroup = this.makeGroup(group);
+        BaseFeature feature = this.utils.makeFea(group.ordinal(), value);
+        this.featureMap.put(featureGroup, feature);
+    }
+}

+ 4 - 9
src/main/scala/com/aliyun/odps/spark/examples/makedata/makedata_01_readhdfs.scala

@@ -5,10 +5,8 @@ import com.aliyun.odps.TableSchema
 import com.aliyun.odps.data.Record
 import com.aliyun.odps.spark.examples.myUtils.ParamUtils
 import com.aliyun.odps.spark.examples.myUtils.env
-import com.google.common.collect.ListMultimap
-import com.tzld.piaoquan.recommend.feature.domain.video.base.RequestContext
-import com.tzld.piaoquan.recommend.feature.domain.video.feature.VlogShareLRFeatureExtractor
 import examples.dataloader.RequestContextOffline
+import examples.dataloader.OfflineVlogShareLRFeatureExtractor
 
 import scala.collection.JavaConversions._
 
@@ -59,14 +57,11 @@ object makedata_01_readhdfs {
     reqContext.putUserFeature(record)
     reqContext.putItemFeature(record)
     reqContext.putSceneFeature(record)
+    val bytesFeatureExtractor = new OfflineVlogShareLRFeatureExtractor()
+    bytesFeatureExtractor.makeFeature(reqContext.featureMap)
 
 
-
-    val bytesFeatureExtractor: VlogShareLRFeatureExtractor = new VlogShareLRFeatureExtractor()
-    bytesFeatureExtractor.getUserFeatures(userBytesFeature)
-    bytesFeatureExtractor.getItemFeature(videoBytesFeature)
-    bytesFeatureExtractor.getContextFeatures(requestContextBytesFeature)
-    val featureMap = bytesFeatureExtractor.getFeatures
+    val featureMap = bytesFeatureExtractor.featureMap
     newLabel + "\t" + featureMap.entries().map(r => r.getValue.getIdentifier + ":1").mkString("\t")
   }