package examples.myUtils; import com.alibaba.fastjson.JSONObject; import java.util.*; public class FissionConvert { private static final double plusSmooth = 3.0; private static final Set realSet = new HashSet<>(Arrays.asList("hour", "group_n", "user_launchs", "user_shares", "user_return_1_uv", "user_return_n_uv")); private static final Set hotSceneSet = new HashSet<>(Arrays.asList("1008", "1007", "1074", "1058", "1067", "1010", "1095")); public static JSONObject getFeature(String dt, Map record, int accurate) { Map featMap = new HashMap<>(); try { String dtKey = String.format("dt@%s", dt); featMap.put(dtKey, 1.0); Map feature = ConvertUtils.getRecordCol(record, "feature"); for (Map.Entry entry : feature.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); if (realSet.contains(key)) { double featValue = Double.parseDouble(value); featMap.put(key, featValue); } else { if ("scene".equals(key)) { String featKey; if (hotSceneSet.contains(value)) { featKey = String.format("%s@%s", key, value); } else { featKey = String.format("%s@%s", key, "other"); } featMap.put(featKey, 1.0); } else { String featKey = String.format("%s@%s", key, value); featMap.put(featKey, 1.0); } } } // rate double launchs = Double.parseDouble(feature.getOrDefault("user_launchs", "0")); double shares = Double.parseDouble(feature.getOrDefault("user_shares", "0")); double return_1_uv = Double.parseDouble(feature.getOrDefault("user_return_1_uv", "0")); double return_n_uv = Double.parseDouble(feature.getOrDefault("user_return_n_uv", "0")); if (launchs > 0) { double rov_1 = FeatureUtils.plusSmooth(return_1_uv, launchs, plusSmooth); double rov_n = FeatureUtils.plusSmooth(return_n_uv, launchs, plusSmooth); double str = FeatureUtils.plusSmooth(shares, launchs, plusSmooth); featMap.put("rov_1", rov_1); featMap.put("rov_n", rov_n); featMap.put("str", str); } if (shares > 0) { double ros_1 = FeatureUtils.plusSmooth(return_1_uv, shares, plusSmooth); double ros_n = FeatureUtils.plusSmooth(return_n_uv, shares, plusSmooth); featMap.put("ros_1", ros_1); featMap.put("ros_n", ros_n); } } catch (Exception e) { e.printStackTrace(); } return ConvertUtils.filterAndTruncate(featMap, accurate); } }