聚类(一)pyspark 实现特征的ID化

该博客介绍了如何使用pyspark将字符串类型的特征转换为数字ID,通过广播映射关系提高效率。示例代码展示了从样本文件读取,创建特征到ID的映射,然后将样本ID化并保存结果。
  • 项目中需要实现一个简单的聚类,初步衡量了下样本数量在2000W左右,第一次写spark还是14年的时候,而且都是基于java实现的模型算法,这次就简单用pyspark实现了特征的Id化, 即将字符串类型的特征转为数字表示的Id。这个在模型中相对比较常见, 比较主要的点应该是使用broadcast广播了特征和id的映射关系。
### 数据处理与可视大屏构建流程 在构建可视大屏时,数据处理通常分为两个阶段:**使用 PySpark 进行大规模数据清洗与分析**,以及**使用 Scikit-learn 进行机器学习建模**。最终的可视系统可以通过 Flask 或 Django 框架结合 ECharts 实现,将分析结果以图表形式展示。 #### 数据处理与建模 PySpark 用于处理大规模数据,包括数据清洗、特征提取和初步的统计分析。使用 `pyspark.sql.DataFrame` 可以高效地进行数据筛选、聚合和特征工程。在完成数据预处理后,可以将结果保存到 MySQL 或 Hive 中,便于后续分析。 ```python from pyspark.sql import SparkSession from pyspark.ml.feature import VectorAssembler spark = SparkSession.builder.appName("DataProcessing").getOrCreate() # 加载数据 df = spark.read.csv("data.csv", header=True, inferSchema=True) # 特征向量 assembler = VectorAssembler(inputCols=["feature1", "feature2", "feature3"], outputCol="features") df = assembler.transform(df) # 保存到 MySQL df.write.format("jdbc").option("url", "jdbc:mysql://localhost:3306/db") \ .option("dbtable", "processed_data") \ .option("user", "root").option("password", "password").mode("overwrite").save() ``` 在数据准备完成后,可以使用 Scikit-learn 进行更复杂的建模,如回归、分类或聚类任务。训练完成的模型可将预测结果写入数据库,供前端系统调用。 ```python import pandas as pd from sklearn.ensemble import RandomForestClassifier # 从 MySQL 读取数据 data = pd.read_sql("SELECT * FROM processed_data", con=engine) # 模型训练 X = data[["feature1", "feature2", "feature3"]] y = data["label"] model = RandomForestClassifier() model.fit(X, y) # 预测保存结果 data["prediction"] = model.predict(X) data.to_sql("prediction_result", con=engine, if_exists="replace") ``` #### 可视大屏搭建 可视大屏通常使用 Flask 或 Django 作为后端框架,结合 ECharts 和 Layui 实现前端展示。后端系统从 MySQL 查询处理结果,以 JSON 格式返回给前端渲染图表。 ```python from flask import Flask, jsonify import pymysql app = Flask(__name__) @app.route("/data") def get_data(): connection = pymysql.connect(host='localhost', user='root', password='password', db='db') cursor = connection.cursor() cursor.execute("SELECT * FROM prediction_result") result = cursor.fetchall() return jsonify(result) ``` 前端使用 ECharts 绘制柱状图、折线图或地图,展示预测结果和关键指标。 ```html <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js"></script> <div id="chart" style="width: 600px; height: 400px;"></div> <script> fetch('/data').then(response => response.json()).then(data => { const chart = echarts.init(document.getElementById('chart')); chart.setOption({ xAxis: { type: 'category', data: data.map(d => d[0]) }, yAxis: { type: 'value' }, series: [{ data: data.map(d => d[1]), type: 'bar' }] }); }); </script> ``` #### 数据库与数据同步 Sqoop 可用于在 Hadoop 和 MySQL 之间进行数据同步,确保分析结果可以被可视系统访问。例如,可以将 Hive 表中的分析结果导出到 MySQL: ```bash sqoop export --connect jdbc:mysql://localhost:3306/db --username root --password password \ --table prediction_result --export-dir /user/hive/warehouse/prediction_result ``` #### 系统架构总结 整个系统架构包含以下几个关键组件: - **PySpark**:用于大规模数据处理和特征工程。 - **Scikit-learn**:用于机器学习建模和预测。 - **MySQL/Hive**:作为数据存储层,用于保存处理后的数据和模型预测结果。 - **Flask/Django**:作为后端服务,提供 RESTful API 接口。 - **ECharts/Layui**:作为前端框架,实现数据可视和交互式展示。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值