全国职业院校技能大赛-大数据应用赛项-数据挖掘-01

子任务一:特征工程
剔除订单信息表与订单详细信息表中用户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

主键

### 关于2023年全国职业院校技能大赛GZ033大数据应用开发任务F的解析 目前提供的引用资料并未直接提及“2023年全国职业院校技能大赛GZ033大数据应用开发任务F”的具体内容。然而,通过类比其他赛项的要求以及常见的大数据竞赛标准,可以推测该任务可能涉及以下几个方面: #### 1. 数据采集预处理 此部分通常要求参赛者能够完成数据源的选择、爬取或导入操作,并对其进行清洗和转换以便后续分析。这一步骤强调对真实世界复杂数据的理解能力以及工具使用的熟练度。 例如,在Python中实现简单的网页抓取可以通过如下方式完成: ```python import requests from bs4 import BeautifulSoup url = 'https://example.com' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') data = soup.find_all('div', class_='content') # 假设目标数据位于特定class下 print([item.text.strip() for item in data]) ``` #### 2. 数据存储管理 针对大规模的数据集,合理选用数据库类型(如关系型MySQL/PostgreSQL或者NoSQL MongoDB/HBase),并设计高效的结构来满足查询性能的需求显得尤为重要[^1]。 假设采用MongoDB作为非结构化文档存储解决方案,则初始化连接过程可示为: ```javascript const { MongoClient } = require('mongodb'); async function main(){ const uri = "your_mongodb_connection_string"; const client = new MongoClient(uri); try { await client.connect(); console.log("Connected correctly to server"); const database = client.db('test_database'); const collection = database.collection('documents'); // Perform actions on the collection object } finally { await client.close(); } } main().catch(console.error); ``` #### 3. 数据挖掘机器学习建模 利用统计学方法探索隐藏模式或是训练预测模型是比赛中的核心环节之一。这里仅考验算法理论基础,还关注工程实践技巧比如特征工程优化等。 下面展示了一个基于Scikit-Learn库构建随机森林分类器的例子: ```python from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42) rf_clf = RandomForestClassifier(n_estimators=100, max_depth=None, min_samples_split=2, bootstrap=True) rf_clf.fit(X_train, y_train) predictions = rf_clf.predict(X_test) accuracy = accuracy_score(y_test, predictions) print(f'Accuracy: {accuracy}') ``` #### 4. 可视化呈现结果 最后阶段往往需要借助图等形式直观达发现规律给评审团看。Matplotlib、Seaborn甚至是D3.js都是错的选择用于制作高质量图形作品。 以下是绘制折线图的一个基本实例: ```python import matplotlib.pyplot as plt plt.figure(figsize=(8,6)) plt.plot(x_values, y_values, label='Trend Line', color='blue') plt.title('Sample Trend Analysis') plt.xlabel('Time Periods') plt.ylabel('Value Measurements') plt.legend() plt.grid(True) plt.show() ``` 尽管以上内容并非完全对应具体题目说明文件里的条款描述,但它代了一般情况下此类赛事所考察的知识范畴和技术要点[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值