spark_idea

news2024/11/28 0:52:59

spark_idea

  • 3、打jar包运行
  • 2、code
  • 1、pom_xml
  • 0、创建数据、模型、预测表
  • 0、Windows配置scala环境

3、打jar包运行

./bin/spark-submit \
  --class spark02 \
  --master spark://hadoop102:7077 \
  --deploy-mode client \
  /home/gpb/scala_spark2.jar

打jar包、存储到虚拟机中
编写执行脚本
touch run_spark.sh
nano run_spark.sh

#!/bin/bash

/opt/module/spark-standalone/bin/spark-submit \
  --class spark02 \
  --master spark://hadoop102:7077 \
  --deploy-mode client \
  /home/gpb/scala_spark2.jar

chmod 777 run_spark.sh

//打开终端,进入当前用户的主目录:
cd ~
//执行 crontab -e 命令编辑当前用户的定时任务配置文件。
crontab -e
//在定时任务配置文件末尾添加一行类似下面的命令,表示每 10 分钟执行一次 /home/gpb/run_spark.sh,并把输出日志重定向到 /home/gpb/run_spark.log 文件:
*/10 * * * * /bin/bash /opt/module/spark-standalone/run_spark.sh >/opt/module/spark-standalone/run_spark.log 2>&1
//按下 Ctrl+X,输入 y,确认保存。

//重启 cron 服务,让新的定时任务生效:

sudo systemctl restart cron.service
//查看日志文件 /home/gpb/run_spark.log,确认任务是否成功执行。
[gpb@hadoop102 spark-standalone]$ sudo systemctl restart cron.service
Failed to restart cron.service: Unit not found.
[gpb@hadoop102 spark-standalone]$ sudo /etc/init.d/cron restart
sudo: /etc/init.d/cron:找不到命令
[gpb@hadoop102 spark-standalone]$ sudo service crond restart
Redirecting to /bin/systemctl restart crond.service
[gpb@hadoop102 spark-standalone]$ sudo /etc/init.d/cron restart
sudo: /etc/init.d/cron:找不到命令
[gpb@hadoop102 spark-standalone]$ sudo systemctl restart crond.service
[gpb@hadoop102 spark-standalone]$ pwd

如果你想停止 crond 服务以停止所有相关的定时任务,请使用以下命令:

sudo systemctl stop crond.service

这会立即停止 crond 服务,并停止所有由它管理的任务。如果你希望禁用 crond 服务(即在系统引导时不自动启动该服务),可以使用以下命令:

sudo systemctl disable crond.service

这将禁用 crond,并防止它在下次系统启动时被自动启动。

如果你希望在不完全禁用服务的情况下停止该服务,可以使用以下命令:

sudo systemctl stop crond.service --now

这会立即停止 crond 服务,但不会禁用它。

2、code

import org.apache.spark.sql.{Encoder, Encoders}
import org.apache.spark.sql.Encoders._
import java.io.ByteArrayOutputStream
import java.io.ObjectOutputStream
import java.sql.{Connection, DriverManager, PreparedStatement}
import org.apache.spark.ml.linalg.{Vector,Vectors}
import org.apache.spark.ml.feature.{IndexToString,StringIndexer,VectorIndexer}
import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.{Pipeline,PipelineModel}
import org.apache.spark.sql.Row
import org.apache.spark.ml.classification.LogisticRegressionModel
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.SparkSession
import java.util.Properties

case class Iris(features:org.apache.spark.ml.linalg.Vector,label:String)

object spark02 {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("Iris Logistic Regression")
      .master("local[*]")
      .getOrCreate()


    // 导入隐式编码器
    // 读取mysql数据、训练模型
    import spark.implicits._
    val url = "jdbc:mysql://hadoop102:3306/mydb"
    val user = "root"
    val password = "000000"
    val table = "flowers8"
    val props = new Properties()
    props.put("user", user)
    props.put("password", password)
    val irisDF = spark.read.jdbc(url, table, props)
    val data = irisDF.map { row =>
      Iris(
        Vectors.dense(row.getAs[Double]("sepal_length"), row.getAs[Double]("sepal_width"),
          row.getAs[Double]("petal_length"), row.getAs[Double]("petal_width")),
        row.getAs[String]("species")
      )
    }
    val labelIndexer=new StringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(data)
    val featureIndexer=new VectorIndexer().setInputCol("features").setOutputCol("indexedFeatures").fit(data)
    val lr=new LogisticRegression().setLabelCol("indexedLabel").setFeaturesCol("indexedFeatures").setMaxIter(100).setRegParam(0.3).setElasticNetParam(0.8)
    val labelConverter = new IndexToString().setInputCol("prediction").setOutputCol("predictedLabel").setLabels(labelIndexer.labels)
    val lrPipeline = new Pipeline().setStages(Array(labelIndexer,featureIndexer,lr,labelConverter))
    val Array(trainingData,testData)=data.randomSplit(Array(0.7,0.3))
    val lrPipelineModel = lrPipeline.fit(trainingData)
    val lrPredictions=lrPipelineModel.transform(testData)
    lrPredictions.
      select("predictedLabel","label","features","probability").collect().
      foreach{case Row(predictedLabel:String,label:String,features:Vector,prob:Vector)=>println(s"($label,$features) -->prob=$prob,predicted Label=$predictedLabel")}
    val evaluator = new MulticlassClassificationEvaluator().
      setLabelCol("indexedLabel").setPredictionCol("prediction")
    val lrAccuracy = evaluator.evaluate(lrPredictions)
    val lrModel = lrPipelineModel.stages(2).asInstanceOf[LogisticRegressionModel]
    println("Coefficients: \n "+ lrModel.coefficientMatrix++ "\nIntercept:"+lrModel.interceptVector+"\n numClasses: "+lrModel.numClasses+"\n numFeatures: "+lrModel.numFeatures)
    val predictions1 = lrModel.transform(testData.withColumnRenamed("features", "indexedFeatures"))
    predictions1 .show()



    // 保存模型到mysql
    val bos = new ByteArrayOutputStream()
    val oos = new ObjectOutputStream(bos)
    oos.writeObject(lrModel)
    oos.flush()
    val bytes = bos.toByteArray()
    val conn: Connection = DriverManager.getConnection("jdbc:mysql://hadoop102:3306/mydb", "root", "000000")
    val stmt: PreparedStatement = conn.prepareStatement("INSERT INTO models8 (name, content) VALUES (?, ?)")
    stmt.setString(1, "my_model")
    stmt.setBytes(2, bytes)
    stmt.executeUpdate()



    // 保存预测数据到mysql
    val table_data = "predicted_flowers8"
    predictions1.select("indexedFeatures", "label", "rawPrediction", "probability", "prediction").foreach { row =>
      val indexedFeatures = row.getAs[org.apache.spark.ml.linalg.Vector]("indexedFeatures")
      val label = row.getAs[String]("label")
      val rawPrediction = row.getAs[org.apache.spark.ml.linalg.Vector]("rawPrediction")
      val probability = row.getAs[org.apache.spark.ml.linalg.Vector]("probability")
      val prediction = row.getAs[Double]("prediction")
      val conn = java.sql.DriverManager.getConnection(url, user, password)
      try {
        val stmt = conn.createStatement()
        val sql = s"""INSERT INTO $table_data
             |(indexedFeatures, label, rawPrediction, probability, prediction)
             |VALUES ('${indexedFeatures.toArray.mkString(",")}', '$label', '${rawPrediction.toArray.mkString(",")}', '${probability.toArray.mkString(",")}', $prediction)
             |""".stripMargin
        stmt.executeUpdate(sql)
      } finally {
        conn.close()
      }
      ()
    }

    spark.stop()
  }
}



1、pom_xml


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hcl.scala</groupId>
    <artifactId>scala_spark1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- Spark SQL dependency -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_2.12</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 该插件用于将 Scala 代码编译成 class 文件 -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
                <executions>
                    <execution>
                        <!-- 声明绑定到 maven 的 compile 阶段 -->
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


</project>

0、创建数据、模型、预测表

SHOW DATABASES;
USE mydb;
SHOW TABLES;


CREATE TABLE flowers8 (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  sepal_length FLOAT,
  sepal_width FLOAT,
  petal_length FLOAT,
  petal_width FLOAT,
  species VARCHAR(255),
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);


CREATE TABLE models8 (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    content BLOB NOT NULL,
    PRIMARY KEY (id),
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);


CREATE TABLE predicted_flowers8 (
    id INT NOT NULL AUTO_INCREMENT,
    indexedFeatures VARCHAR(255),
    label VARCHAR(255),
    rawPrediction VARCHAR(255),
    probability VARCHAR(255),
    prediction DOUBLE,
    PRIMARY KEY (id),
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

0、Windows配置scala环境

链接: scala安装包下载
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

链接: 配置scala环境变量

链接: idea插件scala
在这里插入图片描述
在这里插入图片描述
或者创建maven项目,配置pom_xml依赖,创建scala object文件写代码,打成jar包、在大数据平台上运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是布隆过滤器?如何解决高并发缓存穿透问题?

日常开发中&#xff0c;大家经常使用缓存&#xff0c;但是你知道大型的互联网公司面对高并发流量&#xff0c;要注意缓存穿透问题吗!!! 本文会介绍布隆过滤器&#xff0c;空间换时间&#xff0c;以较低的内存空间、高效解决这个问题。 本篇文章的目录&#xff1a; 1、性能不…

IMX6ULL裸机篇之SPI实验-ICM20608代码实现

一. SPI 实验 SPI实验&#xff1a;学习如何使用 I.MX6U 的 SPI 接口来驱动 ICM-20608&#xff0c;读取 ICM-20608 的六轴数据。 本文学习 SPI通信实验中&#xff0c;涉及从设备的 SPI代码编写。 之前学习了 SPI 主控芯片代码的编写&#xff0c;如下所示&#xff1a; IMX6ULL…

【ROS】RViz使用详解

1、安装 1.1 ROS1-RVIZ RVIZ的ROS1各个ubuntu版本中的安装命令 ubuntu14.04&#xff1a; sudo apt install ros-indigo-rvizubuntu16.04&#xff1a; sudo apt install ros-kinetic-rvizubuntu18.04&#xff1a; sudo apt install ros-melodic-rvizubuntu20.04&#xff1a…

Java厘米级高精准定位系统源码(支持UWB、蓝牙、WIFI定位)

高精准定位系统支持10厘米工业级高精准定位&#xff0c;同时支持UWB&#xff0c;蓝牙&#xff0c;WIFI定位。 ♦高精准定位系统首页为数据统计页面&#xff0c;统计的信息可以分为数量统计、区域告警人数统计、工牌使用量的统计、区域报警率统计以及告警消息的展示。 系统首页…

Pytest教程__常用执行参数详解(3)

前面讲了测试用例的执行方式&#xff0c;也认识了 -v -s 这些参数&#xff0c;那么还有没有其它参数呢&#xff1f;答案肯定是有的&#xff0c;我们可以通过 pytest -h来查看所有可用参数。 从图中可以看出&#xff0c;pytest的参数有很多&#xff0c;但并不是每一个参数都需要…

fiddler高级工具栏中的statistics数据分析工具

Fiddler statistics 板块会统计一个请求开始发出到最终接收并转发的数据&#xff0c;统计和响应的一些信息&#xff1a; 可以使用statistics分页&#xff0c;完成简单的性能测试&#xff0c;查看其接口的响应时间 如图展示&#xff1a; 如图详细解释下每一项的含义&#xff…

grep(General Regular Expression Parser)命令

基本用法 本篇介绍非常有用的命令是grep&#xff0c;这个不寻常的名字代表的是通用正则表达式解析器&#xff08;General Regular Expression Parser&#xff0c;简写为grep&#xff09;。你使用find命令在系统中搜索文件&#xff0c;而使用grep命令在文件中搜索字符串。事实上…

磁盘坏道:sd 2:0:0:0: [sda] Sense Key : Medium Error [current] [descriptor]

现网问题 从log来看磁盘可能存在问题&#xff0c;进一步实锤。 问题定位 通过badblocks扫描磁盘&#xff0c;发现sda磁盘有磁道损坏&#xff0c;建议更换磁盘。 badblocks命令详解 Linux badblocks命令用于检查磁盘装置中损坏的区块,执行指令时须指定所要检查的磁盘装置&…

postman高级使用

概念&#xff1a;让程序代替人判断测试用例执行的结果是否符合预期的一个过程 特点&#xff1a; postman断言使用js编写&#xff0c;断言写在postman的tests中 tests脚本在发送请求之后执行&#xff0c;会把断言的结果最终在testresult中进行展示 常用的postman提供的断言片…

在Django项目中的各个应用中分别编写路由配置文件urls.py

目录 01-通过命令建立三个应用02-配置路由 /index/、/app1/index/、/app2/index/02-1-配置路由 /index/ 并将各个应用的urls.py文件包含进主路由目录中02-02-配置路由/app1/index/02-03-配置路由/app2/index/ 03-编写各个应用的视图views.py 文件04-注册模板文件所在目录05 创建…

CVPR23 | 可编辑3D场景布局的文本引导多对象合成NeRF

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2303.13843 0.背景&#xff1a; 最近&#xff0c;文本到图像生成通过将视觉-语言预训练模型与扩散模型相结合&#xff0c;取得了巨大的成功。这些突破也使得强大…

python: read excel and export excel

""" PythonAppReadExcel.py edit&#xff1a; geovindu,Geovin Du,涂聚文 date 2023-06-13 保险 """ # This is a sample Python script. # python.exe -m pip install --upgrade pip # Press ShiftF10 to execute it or replace it with your c…

orbslam 地图点观测距离范围 mfMinDistance,mfMaxDistance 的理解

目的是在不同帧不同距离的范围内观测到同一个地图点 直观理解&#xff0c;由于相机成像小孔成像近大远小 相机在距离特征点i 1米时图像金字塔第0层的 31x31图像区域&#xff0c; 类似于相机在距离 特征点i 最远约米时的图像金字塔第7层的31x31图像区域。 相机在距离特征点i 1…

桥接模式(十)

不管怎么样&#xff0c;都要继续充满着希望 上一章简单介绍了适配器模式(九), 如果没有看过, 请观看上一章 一. 桥接模式 引用 菜鸟教程里面的 桥接模式介绍: https://www.runoob.com/design-pattern/bridge-pattern.html 桥接&#xff08;Bridge&#xff09;是用于把抽象化…

GitHub 2800颗星,支持GPT/Transformer,字节跳动这个开源项目是怎么来的?

AI 绘画、机器翻译、多轮对话……对于各类 AI 相关的功能来说&#xff0c;总有一个痛点&#xff0c;困扰着所有训模型的算法工程师们&#xff1a; 想要效果更好&#xff0c;那么 AI 模型一般都很大&#xff0c;耗费的算力更多不说&#xff0c;运行起来还更费时间&#xff1b; 如…

关键字static,final的使用

关键字&#xff1a;static 概念 是java中的一个关键字 用于修饰成员&#xff08;成员变量和成员方法&#xff09; 类属性、类方法的设计思想 概念&#xff1a; 当我们编写一个类时&#xff0c;其实就是在描述其对象的属性和行为&#xff0c;而并没有产生实 质上的对象&#x…

使用递归SQL实现树形参数的转换(后传前)

1、什么是递归SQL 递归 SQL&#xff08;Recursive SQL&#xff09;是一种 SQL 查询语言的扩展&#xff0c;它允许在查询中使用递归算法。递归 SQL 通常用于处理树形结构或层次结构数据&#xff0c;例如组织结构、产品分类、地理位置等。 递归 SQL 语句通常包含两个部分&#xf…

大数据入门-大数据技术概述(一)

大数据入门系列文章 大数据入门-大数据是什么 一、概念 大数据技术是指在构架大数据平台的时候需要的技术。包含存储系统&#xff0c;数据库&#xff0c;数据仓库&#xff0c;资源调度&#xff0c;查询引擎&#xff0c;实时框架等。下面以我目前所了解到的一些技术做简要介绍…

React学习笔记十-生命周期(旧)

此文章是本人在学习React的时候&#xff0c;写下的学习笔记&#xff0c;在此纪录和分享。此为第十篇&#xff0c;主要介绍React非常重要的组件的生命周期(旧)。要学习react新的生命周期&#xff0c;那必须先学习旧的生命周期。 目录 1.引出生命周期概念 1.1案例 1.1.1案例卸…

snmp默认团体名/弱口令漏洞及安全加固

一、漏洞描述 SNMP&#xff08;简单网络管理协议&#xff09;被广泛用于计算机操作系统设备、网络设备等领域监测连接到网络上的设备是否有任何引起管理上关注的情况。在运行SNMP服务的设备上&#xff0c;若管理员配置不当运行默认团体名/弱口令访问,将导致敏感信息泄露。敏感…