1.环境搭建完成

2.相关的工具类编写完成
3.配置文件管理类编写完成
zxr
劝酒千百 9 months ago
parent 735e337cac
commit 826a9ec222

@ -4,7 +4,7 @@
<option name="autoReloadType" value="ALL" /> <option name="autoReloadType" value="ALL" />
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="a7505764-040b-48e2-b2fc-8c5b579e595f" name="Default" comment="1.环境搭建完成11&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1"> <list default="true" id="a7505764-040b-48e2-b2fc-8c5b579e595f" name="Default" comment="1.环境搭建完成11&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/session/UserVisitAnalyze.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/session/UserVisitAnalyze.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/main/java/cn/edu/hust/session/UserVisitAnalyze.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hust/session/UserVisitAnalyze.java" afterDir="false" />
</list> </list>
@ -477,7 +477,7 @@
<workItem from="1734349398416" duration="1738000" /> <workItem from="1734349398416" duration="1738000" />
<workItem from="1734352550638" duration="1153000" /> <workItem from="1734352550638" duration="1153000" />
<workItem from="1734354068325" duration="860000" /> <workItem from="1734354068325" duration="860000" />
<workItem from="1734354940766" duration="7325000" /> <workItem from="1734354940766" duration="7942000" />
</task> </task>
<task id="LOCAL-00001" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成"> <task id="LOCAL-00001" summary="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成">
<created>1529592741848</created> <created>1529592741848</created>
@ -573,7 +573,15 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1734360173676</updated> <updated>1734360173676</updated>
</task> </task>
<option name="localTasksCounter" value="13" /> <task id="LOCAL-00013" summary="1.环境搭建完成11&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11">
<option name="closed" value="true" />
<created>1734362412393</created>
<option name="number" value="00013" />
<option name="presentableId" value="LOCAL-00013" />
<option name="project" value="LOCAL" />
<updated>1734362412393</updated>
</task>
<option name="localTasksCounter" value="14" />
<servers /> <servers />
</component> </component>
<component name="TestHistory"> <component name="TestHistory">
@ -695,10 +703,10 @@
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成111&#10;3.配置文件管理类编写完成1111" /> <MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成111&#10;3.配置文件管理类编写完成1111" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成" /> <MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成&#10;3.配置文件管理类编写完成" />
<MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11" /> <MESSAGE value="1.环境搭建完成&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11" />
<MESSAGE value="1.环境搭建完成11&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11" />
<MESSAGE value="1.环境搭建完成1&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1" /> <MESSAGE value="1.环境搭建完成1&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1" />
<MESSAGE value="1.环境搭建完成11&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1" /> <MESSAGE value="1.环境搭建完成11&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1" />
<option name="LAST_COMMIT_MESSAGE" value="1.环境搭建完成11&#10;2.相关的工具类编写完成1&#10;3.配置文件管理类编写完成1" /> <MESSAGE value="1.环境搭建完成11&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11" />
<option name="LAST_COMMIT_MESSAGE" value="1.环境搭建完成11&#10;2.相关的工具类编写完成11&#10;3.配置文件管理类编写完成11" />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/main/java/cn/edu/hust/conf/ConfigurationManager.java"> <entry file="file://$PROJECT_DIR$/src/main/java/cn/edu/hust/conf/ConfigurationManager.java">

@ -616,8 +616,17 @@ public class UserVisitAnalyze {
* @param sessionAggrStatAccumulator * @param sessionAggrStatAccumulator
* @return * @return
*/ */
//方法签名
//方法 filterSessionAndAggrStat 接受三个参数:
//sessionInfoRDD一个 JavaPairRDD包含会话ID和会话信息。
//taskParam一个 JSONObject包含筛选条件。
//sessionAggrStatAccumulator一个 Accumulator用于累加统计信息。
private static JavaPairRDD<String,String> filterSessionAndAggrStat(JavaPairRDD<String, String> sessionInfoRDD, final JSONObject taskParam, final Accumulator<String> sessionAggrStatAccumulator){ private static JavaPairRDD<String,String> filterSessionAndAggrStat(JavaPairRDD<String, String> sessionInfoRDD, final JSONObject taskParam, final Accumulator<String> sessionAggrStatAccumulator){
//得到条件 //得到条件
//从任务参数中提取筛选条件
//从 taskParam 中提取不同的筛选条件,
//如年龄范围、职业、城市、性别、搜索关键词和点击类别ID。
String startAge=ParamUtils.getParam(taskParam,Constants.PARAM_STARTAGE); String startAge=ParamUtils.getParam(taskParam,Constants.PARAM_STARTAGE);
String endAge=ParamUtils.getParam(taskParam,Constants.PARAM_ENDAGE); String endAge=ParamUtils.getParam(taskParam,Constants.PARAM_ENDAGE);
String professionals=ParamUtils.getParam(taskParam,Constants.PARAM_PROFESSONALS); String professionals=ParamUtils.getParam(taskParam,Constants.PARAM_PROFESSONALS);
@ -627,44 +636,60 @@ public class UserVisitAnalyze {
String categoryIds=ParamUtils.getParam(taskParam,Constants.PARAM_CLICK_CATEGORYIDS); String categoryIds=ParamUtils.getParam(taskParam,Constants.PARAM_CLICK_CATEGORYIDS);
//拼接参数 //拼接参数
//将提取的筛选条件拼接成一个字符串 _paramter方便后续进行条件判断。
String _paramter=(startAge!=null?Constants.PARAM_STARTAGE+"="+startAge+"|":"")+ String _paramter=(startAge!=null?Constants.PARAM_STARTAGE+"="+startAge+"|":"")+
(endAge!=null?Constants.PARAM_ENDAGE+"="+endAge+"|":"")+(professionals!=null?Constants.PARAM_PROFESSONALS+"="+professionals+"|":"")+ (endAge!=null?Constants.PARAM_ENDAGE+"="+endAge+"|":"")+(professionals!=null?Constants.PARAM_PROFESSONALS+"="+professionals+"|":"")+
(cities!=null?Constants.PARAM_CIYTIES+"="+cities+"|":"")+(sex!=null?Constants.PARAM_SEX+"="+sex+"|":"")+ (cities!=null?Constants.PARAM_CIYTIES+"="+cities+"|":"")+(sex!=null?Constants.PARAM_SEX+"="+sex+"|":"")+
(keyWords!=null?Constants.PARAM_SERACH_KEYWORDS+"="+keyWords+"|":"")+(categoryIds!=null?Constants.PARAM_CLICK_CATEGORYIDS+"="+categoryIds+"|":""); (keyWords!=null?Constants.PARAM_SERACH_KEYWORDS+"="+keyWords+"|":"")+(categoryIds!=null?Constants.PARAM_CLICK_CATEGORYIDS+"="+categoryIds+"|":"");
//去除末尾多余的 |
//确保参数格式正确。
if(_paramter.endsWith("\\|")) if(_paramter.endsWith("\\|"))
_paramter=_paramter.substring(0,_paramter.length()-1); _paramter=_paramter.substring(0,_paramter.length()-1);
//定义最终参数
//使用 final 关键字定义最终参数 paramter确保在 filter 函数中可以使用。
final String paramter=_paramter; final String paramter=_paramter;
//过滤和统计会话数据
JavaPairRDD<String,String> filteredSessionRDD=sessionInfoRDD.filter(new Function<Tuple2<String, String>, Boolean>() { JavaPairRDD<String,String> filteredSessionRDD=sessionInfoRDD.filter(new Function<Tuple2<String, String>, Boolean>() {
@Override @Override
public Boolean call(Tuple2<String, String> tuple2) throws Exception { public Boolean call(Tuple2<String, String> tuple2) throws Exception {
String sessionInfo=tuple2._2; String sessionInfo=tuple2._2;
//按照条件进行过滤 //按照条件进行过滤
//
//按照年龄进行过滤 //按照年龄进行过滤
if(!ValidUtils.between(sessionInfo,Constants.FIELD_AGE,paramter,Constants.PARAM_STARTAGE,Constants.PARAM_ENDAGE)) if(!ValidUtils.between(sessionInfo,Constants.FIELD_AGE,paramter,Constants.PARAM_STARTAGE,Constants.PARAM_ENDAGE))
return false; return false;
//
//按照职业进行过滤 //按照职业进行过滤
if(!ValidUtils.in(sessionInfo,Constants.FIELD_PROFESSIONAL,paramter,Constants.PARAM_PROFESSONALS)) if(!ValidUtils.in(sessionInfo,Constants.FIELD_PROFESSIONAL,paramter,Constants.PARAM_PROFESSONALS))
return false; return false;
//
//按照城市进行过滤 //按照城市进行过滤
if(!ValidUtils.in(sessionInfo,Constants.FIELD_CITY,paramter,Constants.PARAM_CIYTIES)) if(!ValidUtils.in(sessionInfo,Constants.FIELD_CITY,paramter,Constants.PARAM_CIYTIES))
return false; return false;
//
//按照性别进行筛选 //按照性别进行筛选
if(!ValidUtils.equal(sessionInfo,Constants.FIELD_SEX,paramter,Constants.PARAM_SEX)) if(!ValidUtils.equal(sessionInfo,Constants.FIELD_SEX,paramter,Constants.PARAM_SEX))
return false; return false;
//
//按照搜索词进行过滤,只要有一个搜索词即可 //按照搜索词进行过滤,只要有一个搜索词即可
if(!ValidUtils.in(sessionInfo,Constants.FIELD_SERACH_KEYWORDS,paramter,Constants.PARAM_PROFESSONALS)) if(!ValidUtils.in(sessionInfo,Constants.FIELD_SERACH_KEYWORDS,paramter,Constants.PARAM_PROFESSONALS))
return false; return false;
if(!ValidUtils.in(sessionInfo,Constants.FIELD_CLICK_CATEGORYIDS,paramter,Constants.FIELD_CLICK_CATEGORYIDS)) if(!ValidUtils.in(sessionInfo,Constants.FIELD_CLICK_CATEGORYIDS,paramter,Constants.FIELD_CLICK_CATEGORYIDS))
return false; return false;
//如果经过了之前的所有的过滤条件,也就是满足用户筛选条件 //如果经过了之前的所有的过滤条件,也就是满足用户筛选条件
sessionAggrStatAccumulator.add(Constants.SESSION_COUNT); sessionAggrStatAccumulator.add(Constants.SESSION_COUNT);
//计算出访问时长和访问步长的范围并进行相应的累加 //计算出访问时长和访问步长的范围并进行相应的累加
Long visitLength=Long.valueOf(StringUtils.getFieldFromConcatString(sessionInfo,"\\|",Constants.FIELD_VISIT_LENGTH)); Long visitLength=Long.valueOf(StringUtils.getFieldFromConcatString(sessionInfo,"\\|",Constants.FIELD_VISIT_LENGTH));
Long stepLength=Long.valueOf(StringUtils.getFieldFromConcatString(sessionInfo,"\\|",Constants.FIELD_STEP_LENGTH)); Long stepLength=Long.valueOf(StringUtils.getFieldFromConcatString(sessionInfo,"\\|",Constants.FIELD_STEP_LENGTH));
//使用函数进行统计 //使用函数进行统计
calculateVisitLength(visitLength); calculateVisitLength(visitLength);
calculateStepLength(stepLength); calculateStepLength(stepLength);
@ -672,6 +697,8 @@ public class UserVisitAnalyze {
} }
//统计访问时长的数量 //统计访问时长的数量
//从会话信息中提取访问时长 visitLength。
//根据 visitLength 的范围进行统计,累加到 sessionAggrStatAccumulator 中。
private void calculateVisitLength(Long visitLegth) private void calculateVisitLength(Long visitLegth)
{ {
if(visitLegth>=1&&visitLegth<=3) if(visitLegth>=1&&visitLegth<=3)
@ -693,7 +720,10 @@ public class UserVisitAnalyze {
else if(visitLegth>1800) else if(visitLegth>1800)
sessionAggrStatAccumulator.add(Constants.TIME_PERIOD_30m); sessionAggrStatAccumulator.add(Constants.TIME_PERIOD_30m);
} }
//统计访问步长的数量 //统计访问步长的数量
//从会话信息中提取访问步长 stepLength。
//根据 stepLength 的范围进行统计,累加到 sessionAggrStatAccumulator 中。
private void calculateStepLength(Long stepLength) private void calculateStepLength(Long stepLength)
{ {
if(stepLength>=1&&stepLength<=3) if(stepLength>=1&&stepLength<=3)
@ -710,8 +740,28 @@ public class UserVisitAnalyze {
sessionAggrStatAccumulator.add(Constants.STEP_PERIOD_60); sessionAggrStatAccumulator.add(Constants.STEP_PERIOD_60);
} }
}); });
//返回过滤后的会话数据 filteredSessionRDD。
return filteredSessionRDD; return filteredSessionRDD;
} }
/**
*
* ID访访
*
* taskParam
* _paramter
* 使 filter
* 访访
* 访访
* filteredSessionRDD
* 访访
*/
/** /**
* *
@ -720,16 +770,40 @@ public class UserVisitAnalyze {
* @param sessionInfoPairRDD * @param sessionInfoPairRDD
* @return * @return
*/ */
//定义一个静态方法 getFilterFullInfoRDD该方法接受两个参数
//filteredSessionRDD一个 JavaPairRDD<String, String>,包含过滤后的会话信息。
//sessionInfoPairRDD一个 JavaPairRDD<String, Row>
// 包含完整的会话信息会话ID和包含详细信息的 Row 对象)。
private static JavaPairRDD<String, Row> getFilterFullInfoRDD(JavaPairRDD<String, String> filteredSessionRDD, JavaPairRDD<String, Row> sessionInfoPairRDD) { private static JavaPairRDD<String, Row> getFilterFullInfoRDD(JavaPairRDD<String, String> filteredSessionRDD, JavaPairRDD<String, Row> sessionInfoPairRDD) {
//1.获取符合条件的session范围的所有品类 //1.获取符合条件的session范围的所有品类
//使用 filteredSessionRDD 和 sessionInfoPairRDD 进行 join 操作,
// 将两个 RDD 中的相同 key会话ID的数据连接在一起。
//使用 mapToPair 方法对连接后的结果进行转换,生成新的 JavaPairRDD。
return filteredSessionRDD.join(sessionInfoPairRDD).mapToPair(new PairFunction<Tuple2<String, Tuple2<String, Row>>, String, Row>() { return filteredSessionRDD.join(sessionInfoPairRDD).mapToPair(new PairFunction<Tuple2<String, Tuple2<String, Row>>, String, Row>() {
@Override @Override
public Tuple2<String, Row> call(Tuple2<String, Tuple2<String, Row>> stringTuple2Tuple2) throws Exception { public Tuple2<String, Row> call(Tuple2<String, Tuple2<String, Row>> stringTuple2Tuple2) throws Exception {
//从 Tuple2<String, Tuple2<String, Row>> 中提取会话ID stringTuple2Tuple2._1
// 和完整的 Row 对象 stringTuple2Tuple2._2._2。
//将会话ID和完整的 Row 对象封装为一个新的 Tuple2<String, Row> 并返回。
return new Tuple2<String, Row>(stringTuple2Tuple2._1,stringTuple2Tuple2._2._2); return new Tuple2<String, Row>(stringTuple2Tuple2._1,stringTuple2Tuple2._2._2);
} }
}); });
} }
/**
*
*
* RDD使 join filteredSessionRDD sessionInfoPairRDD ID
* mapToPair Tuple2 ID Row
* JavaPairRDD<String, Row> Row
*/
/** /**
* Sesison * Sesison
* @param taskId * @param taskId

Loading…
Cancel
Save