2021年安徽省大数据与人工智能应用竞赛 大数据-本科组赛题第五部分spark mllib

1、请列出Hadoop中需要哪些配置文件,其作用是什么(5分)

答:
1)core-site.xml:
(1)fs.defaultFS:hdfs://cluster1(域名),这里的值指的是默认的HDFS路径 。
(2)hadoop.tmp.dir:/export/data/hadoop_tmp,这里的路径默认是NameNode、DataNode、secondaryNamenode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。
(3)ha.zookeeper.quorum:hadoop101:2181,hadoop102:2181,hadoop103:2181,这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点 。
2)hadoop-env.sh: 只需设置jdk的安装路径,如:export JAVA_HOME=/usr/local/jdk。
3)hdfs-site.xml:
(1) dfs.replication:他决定着系统里面的文件块的数据备份个数,默认为3个。
(2) dfs.data.dir:datanode节点存储在文件系统的目录 。
(3) dfs.name.dir:是namenode节点存储hadoop文件系统信息的本地系统路径 。
4)mapred-site.xml:
mapreduce.framework.name: yarn指定mr运行在yarn上。
Hadoop的几个默认端口及其含义
1)dfs.namenode.http-address:50070
2)SecondaryNameNode辅助名称节点端口号:50090
3)dfs.datanode.address:50010
4)fs.defaultFS:8020 或者9000
5)yarn.resourcemanager.webapp.address:8088

2、利用spark进行数据挖掘建模(15分)

本题目只能使用 spark的ml相关技术,不得使用python的数据挖掘。
数据集:
客户流失已成为每个希望提高品牌忠诚度的公司重点关注的问题,本题目基于某电信公司流失客户数据集,将提供训练集和验证集供建模使用,请回复验证集数据的模型计算结果文件和建模过程文档。
a)回复 当前模型的查全率和查准率分别是多少
b)回复结果文件要求
结果文件请以逗号分隔符文本文件提供,包含以下字段:
1、用户标志
2、预测是否进入异常状态(1:异常状态;0-非异常状态)
c)建模过程文 档请以WORD文档形式提供,需要详细列出数据探索过程和建模思路。

数据说明:
字段名称 字段类型 中文名称和注释
USER_ID VARCHAR(16) 用户标志(两文件里的用户标志没有关联性)
FLOW DECIMAL(16) 当月流量(Byte)
FLOW_LAST_ONE DECIMAL(16) 上一月流量(Byte)
FLOW_LAST_TWO DECIMAL(16) 上两个月流量(Byte)
MONTH_FEE DECIMAL(18,2) 当月收入(元)
MONTHS_3AVG DECIMAL(18,2) 最近3个月平均收入(元)
BINDEXP_DATE DATE 绑定到期时间
PHONE_CHANGE INTEGER 当月是否更换终端
AGE INTEGER 年龄
OPEN_DATE DATE 开户时间
REMOVE_TAG CHARACTER(1) 用户状态(‘A’:正常,其他异常)(验证集中不提供此字段)

使用spark的describe函数来对训练集 数据探查,数据描述结果(每一列的最大值,最小值,最大值等数据描述信息)截图(1分):
在这里插入图片描述
使用spark的describe函数来对训练集 数据探查,数据描述结果(每一列的最大值,最小值,最大值等数据描述信息)截图(1分):
在这里插入图片描述
在这里插入图片描述
训练集数据处理 结果截图(3分):在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
模型的查全率,查准率 结果截图(2分):

代码截图:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

预测 结果截图(3分):
在这里插入图片描述

  def main(args: Array[String]): Unit = {
    //创建spark环境
    val spark: SparkSession = SparkSession
      .builder()
      .appName("spark")
      .master("local[4]")
      .config("spark.sql.shuffle.partitions", 1)
      .getOrCreate()

    import spark.implicits._
    import org.apache.spark.sql.functions._


    val data: DataFrame = spark.read
      .format("csv")
      .option("header", "true")
      .load("data/预测集.csv")
    data.printSchema()
    data.show()


    val data1: DataFrame = data.map(row => {

      val USER_ID: Double = row.getAs[String]("USER_ID").toDouble
      val FLOW: Double = row.getAs[String]("FLOW").toDouble
      val FLOW_LAST_ONE: Double = row.getAs[String]("FLOW_LAST_ONE").toDouble
      val FLOW_LAST_TWO: Double = row.getAs[String]("FLOW_LAST_TWO").toDouble
      val MONTH_FEE: Double = row.getAs[String]("MONTH_FEE").toDouble
      val MONTHS_3AVG: Double = row.getAs[String]("MONTHS_3AVG").toDouble
      val BINDEXP_DATE: Double = row.getAs[String]("BINDEXP_DATE").toDouble
      val PHONE_CHANGE: Double = row.getAs[String]("PHONE_CHANGE").toDouble
      val AGE: Double = row.getAs[String]("AGE").toDouble
      val OPEN_DATE: Double = row.getAs[String]("OPEN_DATE").toDouble

      //特征值
      val array: Array[Double] = Array(USER_ID, FLOW, FLOW_LAST_ONE, FLOW_LAST_TWO, MONTH_FEE, MONTHS_3AVG, BINDEXP_DATE, PHONE_CHANGE, AGE, OPEN_DATE)
      //将特征值转成向量

      val features: linalg.Vector = Vectors.dense(array)
      Tuple1(features)


    }).toDF("features")


    //加载模型
    val mode1: LogisticRegression = LogisticRegression.load("data/model")
    val proData: DataFrame = mode1.transform(data1)
    proData.show()
  }

}

建模过程,建模思路描述(6分):

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫尼莫尼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值