RequestContextOffline.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package examples.dataloader;
  2. import com.aliyun.odps.data.Record;
  3. import java.util.Arrays;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import java.util.stream.Collectors;
  7. public class RequestContextOffline {
  8. public Map<String, Object> featureMap = new HashMap<>();
  9. public void putUserFeature(Record record){
  10. setKVinMap(record, "machineinfo_brand", "string", "");
  11. setKVinMap(record, "machineinfo_model", "string", "");
  12. setKVinMap(record, "machineinfo_platform", "string","");
  13. setKVinMap(record, "machineinfo_system", "string","");
  14. setKVinMap(record, "u_1day_exp_cnt", "double", "cnt");
  15. setKVinMap(record, "u_1day_click_cnt", "double", "cnt");
  16. setKVinMap(record, "u_1day_share_cnt", "double", "cnt");
  17. setKVinMap(record, "u_1day_return_cnt", "double", "cnt");
  18. setKVinMap(record, "u_ctr_1day", "double", "rate");
  19. setKVinMap(record, "u_str_1day", "double", "rate");
  20. setKVinMap(record, "u_rov_1day", "double", "rate");
  21. setKVinMap(record, "u_ros_1day", "double", "rate");
  22. setKVinMap(record, "u_3day_exp_cnt", "double", "cnt");
  23. setKVinMap(record, "u_3day_click_cnt", "double", "cnt");
  24. setKVinMap(record, "u_3day_share_cnt", "double", "cnt");
  25. setKVinMap(record, "u_3day_return_cnt", "double", "cnt");
  26. setKVinMap(record, "u_ctr_3day", "double", "rate");
  27. setKVinMap(record, "u_str_3day", "double", "rate");
  28. setKVinMap(record, "u_rov_3day", "double", "rate");
  29. setKVinMap(record, "u_ros_3day", "double", "rate");
  30. }
  31. public void putItemFeature(Record record){
  32. // setKVinMap(record, "i_title_len", "double", "cnt");
  33. setKVinMap(record, "total_time", "double", "cnt");
  34. // setKVinMap(record, "i_days_since_upload", "double", "cnt");
  35. setKVinMap(record, "play_count_total", "double", "cnt");
  36. setKVinMap(record, "i_1day_exp_cnt", "double", "cnt");
  37. setKVinMap(record, "i_1day_click_cnt", "double", "cnt");
  38. setKVinMap(record, "i_1day_share_cnt", "double", "cnt");
  39. setKVinMap(record, "i_1day_return_cnt", "double", "cnt");
  40. setKVinMap(record, "i_ctr_1day", "double", "rate");
  41. setKVinMap(record, "i_str_1day", "double", "rate");
  42. setKVinMap(record, "i_rov_1day", "double", "rate");
  43. setKVinMap(record, "i_ros_1day", "double", "rate");
  44. setKVinMap(record, "i_3day_exp_cnt", "double", "cnt");
  45. setKVinMap(record, "i_3day_click_cnt", "double", "cnt");
  46. setKVinMap(record, "i_3day_share_cnt", "double", "cnt");
  47. setKVinMap(record, "i_3day_return_cnt", "double", "cnt");
  48. setKVinMap(record, "i_ctr_3day", "double", "rate");
  49. setKVinMap(record, "i_str_3day", "double", "rate");
  50. setKVinMap(record, "i_rov_3day", "double", "rate");
  51. setKVinMap(record, "i_ros_3day", "double", "rate");
  52. }
  53. public void putSceneFeature(Record record){
  54. setKVinMap(record, "ctx_week", "string", "");
  55. setKVinMap(record, "ctx_hour", "string", "");
  56. setKVinMap(record, "ctx_region", "string","");
  57. setKVinMap(record, "ctx_city", "string","");
  58. }
  59. public void setKVinMap(Record record, String key, String instance, String cntOrRate){
  60. if (!Arrays.stream(record.getColumns()).map(r-> r.getName()).collect(Collectors.toSet()).contains(key)){
  61. return;
  62. }
  63. String value;
  64. try{
  65. value = record.getString(key);
  66. }catch (Exception e){
  67. value = String.valueOf(record.getBigint(key));
  68. }
  69. if (value == null){
  70. return;
  71. }
  72. String ins = instance.toLowerCase();
  73. switch (ins){
  74. case "string":
  75. featureMap.put(key, value);
  76. return;
  77. case "double":
  78. if ("cnt".equals(cntOrRate)){
  79. featureMap.put(key, String.valueOf(this.bucketRatioFeature(Double.valueOf(value))));
  80. }else if ("rate".equals(cntOrRate)){
  81. featureMap.put(key, String.valueOf(this.ceilLog(Double.valueOf(value))));
  82. }
  83. return;
  84. case "int":
  85. return;
  86. case "long":
  87. return;
  88. default:
  89. return;
  90. }
  91. }
  92. public double ceilLog(Double key) {
  93. return Math.ceil(Math.log(key + 1.0));
  94. }
  95. public double bucketRatioFeature(Double key) {
  96. long bucket = Math.round(Math.log((key + 1.0) * 50.0));
  97. if (bucket > 50L) {
  98. bucket = 50L;
  99. }
  100. return (double)bucket;
  101. }
  102. }