子任务一:特征工程
剔除订单信息表与订单详细信息表中用户id与商品id不存在现有的维表中的记录,同时建议多利用缓存并充分考虑并行度来优化代码,达到更快的计算效果。1、根据Hive的dwd库中相关表或MySQL中shtd_store中相关表(order_detail、sku_info),计算出与用户id为6708的用户所购买相同商品种类最多的前10位用户(只考虑他俩购买过多少种相同的商品,不考虑相同的商品买了多少次),将10位用户id进行输出,若与多个用户购买的商品种类相同,则输出结果按照用户id升序排序,输出格式如下,将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下;
结果格式如下:
-------------------相同种类前10的id结果展示为:--------------------
1,2,901,4,5,21,32,91,14,52
def main(args: Array[String]): Unit = {
val spark: SparkSession = sparkSessionUtils.getSession
import spark.implicits._
val order_detail: DataFrame = mysqlUtils.read(spark, "ds_db01", "order_detail")
val order_info: DataFrame = mysqlUtils.read(spark, "ds_db01", "order_info")
// 根据order_id连接起来,查出每个用户购买的商品并去重
val data: Dataset[Row] = order_detail.join(order_info, order_detail("order_id") === order_info("id"))
.select("user_id", "sku_id")
.distinct()
// 6708用户所购买的商品
val user6708_skuids: Array[Int] = data.filter(col("user_id") === 6708).select("sku_id").map((_: Row) (0).toString.toInt).collect()
val user_ids: String = data.withColumn("cos", when(col("sku_id").isin(user6708_skuids: _*), 1.0).otherwise(0.0))
.groupBy("user_id")
.agg(sum("cos").as("same"))
.filter(col("user_id") !== 6708)
.orderBy(desc("same"), asc("user_id"))
.limit(10)
.map((_: Row) (0).toString)
.collect()
.mkString(",")
val str = user_ids.map(_(0).toString)
.collect()
.mkString(",")
println("-------------------相同种类前10的id结果展示为:--------------------")
println(str)
sparkSessionUtils.close(spark)
}
2、根据Hive的dwd库中相关表或MySQL中shtd_store中相关商品表(sku_info),获取id、spu_id、price、weight、tm_id、category3_id 这六个字段并进行数据预处理,对price、weight进行规范化(StandardScaler)处理,对spu_id、tm_id、category3_id进行one-hot编码处理(若该商品属于该品牌则置为1,否则置为0),并按照id进行升序排序,在集群中输出第一条数据前10列(无需展示字段名),将结果截图粘贴至客户端桌面【Release\任务C提交结果.docx】中对应的任务序号下。
字段 |
类型 |
中文含义 |
备注 |
id |
double |
主键 |
|