StatisticsUtil.java 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package examples.utils;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import org.apache.commons.lang3.StringUtils;
  5. import org.apache.spark.broadcast.Broadcast;
  6. import scala.collection.immutable.Set;
  7. import java.util.Map;
  8. public class StatisticsUtil {
  9. public static void featureCoverRate(String record, Broadcast<Set<String>> featureNames, Map<String, Long> allMap, Map<String, Long> isShareMap, Map<String, Long> isReturnNoSelfMap) {
  10. String[] rSplit = record.split("\t");
  11. // 异常样本统计
  12. if (rSplit.length != 3) {
  13. StatisticsUtil.mapKeyAddOne(allMap, "errorSampleNum");
  14. StatisticsUtil.mapKeyAddOne(isShareMap, "errorSampleNum");
  15. StatisticsUtil.mapKeyAddOne(isReturnNoSelfMap, "errorSampleNum");
  16. return;
  17. }
  18. // 是否推荐场景
  19. JSONObject logKey = JSON.parseObject(rSplit[0]);
  20. String page = logKey.getString("page");
  21. String recommendPageType = logKey.getString("recommendpagetype");
  22. JSONObject labelKey = JSON.parseObject(rSplit[1]);
  23. String isShare = labelKey.getString("is_share");
  24. String isReturnNoSelf = logKey.getString("is_return_noself");
  25. if (StatisticsUtil.isRecommendScene(page, recommendPageType)) {
  26. StatisticsUtil.mapKeyAddOne(allMap, "recommendSampleNum");
  27. if (StringUtils.equals("1", isShare)) {
  28. StatisticsUtil.mapKeyAddOne(isShareMap, "recommendSampleNum");
  29. }
  30. if (StringUtils.equals("1", isReturnNoSelf)) {
  31. StatisticsUtil.mapKeyAddOne(isReturnNoSelfMap, "recommendSampleNum");
  32. }
  33. }
  34. // 正常数据统计
  35. StatisticsUtil.mapKeyAddOne(allMap, "normalSampleNum");
  36. if (StringUtils.equals("1", isShare)) {
  37. StatisticsUtil.mapKeyAddOne(isShareMap, "normalSampleNum");
  38. }
  39. if (StringUtils.equals("1", isReturnNoSelf)) {
  40. StatisticsUtil.mapKeyAddOne(isReturnNoSelfMap, "normalSampleNum");
  41. }
  42. // 特征大于0统计
  43. JSONObject feature = JSON.parseObject(rSplit[2]);
  44. for (String featureName : featureNames) {
  45. if (feature.containsKey(featureName) && feature.getDoubleValue(featureName) > 0) {
  46. StatisticsUtil.mapKeyAddOne(allMap, featureName);
  47. if (StringUtils.equals("1", isShare)) {
  48. StatisticsUtil.mapKeyAddOne(isShareMap, featureName);
  49. }
  50. if (StringUtils.equals("1", isReturnNoSelf)) {
  51. StatisticsUtil.mapKeyAddOne(isReturnNoSelfMap, featureName);
  52. }
  53. }
  54. }
  55. }
  56. private static boolean isRecommendScene(String page, String recommendPageType) {
  57. if (StringUtils.equals("详情后沉浸页", page)) {
  58. return true;
  59. } else if (StringUtils.equals("回流后沉浸页&内页feed", page) && StringUtils.isNotBlank(recommendPageType) && recommendPageType.endsWith("-pages/user-videos-share-recommend-detail")) {
  60. return true;
  61. }
  62. return false;
  63. }
  64. private static void mapKeyAddOne(Map<String, Long> resultMap, String key) {
  65. if (!resultMap.containsKey(key)) {
  66. resultMap.put(key, 0L);
  67. }
  68. resultMap.put(key, resultMap.get(key) + 1);
  69. }
  70. }