【电影推荐系统】数据加载

news2024/11/25 8:22:55

目录

数据集

解释

movie.csv

ratings.csv

tag.csv

数据预处理

 mongodb

将数据按照csv文件里的分割符进行分割,转换为DF

Moive

Rating

Tag

es

将mongo集合tag 根据mid tag => mid tags(tag1|tag2|tag3...)

 moive 添加一列 tags

导入后数据库信息

mongodb

Movie

Rating

Tag

es

完整代码


数据集

链接:https://pan.baidu.com/s/1OjJ66PsES-qsun7sV_OeJA?pwd=2580 
提取码:2580 

解释

movie.csv

1^Toy Story (1995)^ ^81 minutes^March 20, 2001^1995^English 
^Adventure|Animation|Children|Comedy|Fantasy ^Tom Hanks|Tim Allen|Don 
Rickles|Jim Varney|Wallace Shawn|John Ratzenberger|Annie Potts|John 
Morris|Erik von Detten|Laurie Metcalf|R. Lee Ermey|Sarah Freeman|Penn 
Jillette|Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn ^John 
Lasseter

ratings.csv

1,31,2.5,1260759144

tag.csv

1,31,action,1260759144

 

数据预处理

 mongodb

将数据按照csv文件里的分割符进行分割,转换为DF

核心代码

Moive

    //加载数据
    val movieRDD = spark.sparkContext.textFile(MOVIE_DATA_PATH)   
 //  将数据预处理 字符串分割 => 数组 => 封装 成 Movie类
    //   1^Toy Story (1995)^ ^81 minutes^March 20, 2001^1995^English ^Adventure|Animation|Children|Comedy|Fantasy ^Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn|John Ratzenberger|Annie Potts|John Morris|Erik von Detten|Laurie Metcalf|R. Lee Ermey|Sarah Freeman|Penn Jillette|Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn ^John Lasseter
    val movieDF = movieRDD.map(
      item => {
        //      .split() 里面一般是正则 ^ 的正则 \\^
        val s = item.split("\\^")
        //          scala 数组用()
        //      .split()切割后,一般需要.trim
        Movie(s(0).toInt, s(1).trim, s(2).trim, s(3).trim, s(4).trim, s(5).trim, s(6).trim, s(7).trim, s(8).trim, s(9).trim)
      }
    ).toDF()
//    mongodb
//    { "_id" : ObjectId("644b85b62ecfa735d034ce31"), "mid" : 1, "name" : "Toy Story (1995)", "descri" : "", "timelong" : "81 minutes", "issue" : "March 20, 2001", "shoot" : "1995", "language" : "English", "genres" : "Adventure|Animation|Children|Comedy|Fantasy", "actors" : "Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn|John Ratzenberger|Annie Potts|John Morris|Erik von Detten|Laurie Metcalf|R. Lee Ermey|Sarah Freeman|Penn Jillette|Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn", "directors" : "John Lasseter" }

Rating

    val ratingRDD = spark.sparkContext.textFile(RATING_DATA_PATH)
    //    1,31,2.5,1260759144
    val ratingDF = ratingRDD.map(item => {
      val s = item.split(",")
      Rating(s(0).toInt, s(1).toInt, s(2).toDouble, s(3).toInt)
    }).toDF()
//    mongodb
//{ "_id" : ObjectId("644b85b62ecfa735d034d83f"), "uid" : 1, "mid" : 31, "score" : 2.5, "timestamp" : 1260759144 }

Tag

    //    15,1955,dentist,1193435061
    val tagRDD = spark.sparkContext.textFile(TAG_DATA_PATH)
    val tagDF = tagRDD.map(item => {
      val s = item.split(",")
      Tag(s(0).toInt, s(1).toInt, s(2).trim, s(3).toInt)
    }).toDF()
//    mongodb
//    { "_id" : ObjectId("644b85b72ecfa735d035854f"), "uid" : 15, "mid" : 1955, "tag" : "dentist", "timestamp" : 1193435061 }

es

将mongo集合tag 根据mid tag => mid tags(tag1|tag2|tag3...)

形成

mid1 tags(tag1|tag2|tag3...)

mid2 tags(tag1|tag2|tag3...)

mid3 tags(tag1|tag2|tag3...)

mid4 tags(tag1|tag2|tag3...) ...

核心代码

     /* mid tags
     * tags:  tag1 |tag2|tag3
     */
    val newTag = tagDF.groupBy($"mid")
      //agg函数经常与groupBy函数一起使用,起到分类聚合的作用;
      //如果单独使用则对整体进行聚合;
      .agg(concat_ws("|", collect_set($"tag")).as("tags"))
      .select("mid", "tags")

相当于 hql

select mid, concat_ws("|",collect_set(tag)) as tags
from tag
group by mid;

 moive 添加一列 tags

核心代码

val newMovieDF = movieDF.join(newTag, Seq("mid"), "left")

相当于 Hql

select * 
from movie m
left join
select * 
from newTag t
where m.mid = t.mid;

导入后数据库信息

mongodb

sudo ./bin/mongod  -config ./data/mongodb.conf
show dbs
use 数据库名字
show collections
db.集合名字.find()

Movie

 { "_id" : ObjectId("644b85b62ecfa735d034ce31"), "mid" : 1, "name" : "Toy Story (1995)", "descri" : "", "timelong" : "81 minutes", "issue" : "March 20, 2001", "shoot" : "1995", "language" : "English", "genres" : "Adventure|Animation|Children|Comedy|Fantasy", "actors" : "Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn|John Ratzenberger|Annie Potts|John Morris|Erik von Detten|Laurie Metcalf|R. Lee Ermey|Sarah Freeman|Penn Jillette|Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn", "directors" : "John Lasseter" }

Rating

{ "_id" : ObjectId("644b85b62ecfa735d034d83f"), "uid" : 1, "mid" : 31, "score" : 2.5, "timestamp" : 1260759144 }

 

Tag

 { "_id" : ObjectId("644b85b72ecfa735d035854f"), "uid" : 15, "mid" : 1955, "tag" : "dentist", "timestamp" : 1193435061 }

es

./bin/elasticsearch -d
curl http://hadoop100:9200/

 

完整代码

package com.qh.recommender

import com.mongodb.casbah.commons.MongoDBObject
import com.mongodb.casbah.{MongoClient, MongoClientURI}
import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest
import org.elasticsearch.common.settings.Settings
import org.elasticsearch.common.transport.InetSocketTransportAddress
import org.elasticsearch.transport.client.PreBuiltTransportClient

import java.net.InetAddress

/**
 * 将数据封装成样例类
 */
case class Movie(mid: Int, name: String, descri: String, timelong: String, issue: String,
                 shoot: String, language: String, genres: String, actors: String, directors: String)

case class Rating(uid: Int, mid: Int, score: Double, timestamp: Int)

case class Tag(uid: Int, mid: Int, tag: String, timestamp: Int)

/**
 * 把mongodb, es的配置封装3成样例类
 */

/**
 *
 * @param uri MongoDB连接
 * @param db  MongoDB数据库
 */
case class MongoConfig(uri: String, db: String)

/**
 *
 * @param httpHosts      http主机列表,逗号分割 9200
 * @param transportHosts transport主机列表,集群内部传输用的端口号
 * @param index          需要操作的索引
 * @param clustername    集群名称,默认配置名
 *                       启动es  cluter_name
 *                       Movie/_search
 */
case class ESConfig(httpHosts: String, transportHosts: String, index: String, clustername: String)

object DataLoader {


  val MOVIE_DATA_PATH = "E:\\project\\BigData\\MovieSystem\\recommender\\DataLoader\\src\\main\\resources\\movies.csv"
  val RATING_DATA_PATH = "E:\\project\\BigData\\MovieSystem\\recommender\\DataLoader\\src\\main\\resources\\ratings.csv"
  val TAG_DATA_PATH = "E:\\project\\BigData\\MovieSystem\\recommender\\DataLoader\\src\\main\\resources\\tags.csv"

  //  定义表名参数
  val MONGODB_MOVIE_COLLECTION = "Movie"
  val MONGODB_RATING_COLLECTION = "Rating"
  val MONGODB_TAG_COLLECTION = "Tag"
  val ES_MOVIE_INDEX = "Movie"


  def main(args: Array[String]): Unit = {

    val config = Map(
      "spark.cores" -> "local[*]",
      "mongo.uri" -> "mongodb://hadoop100:27017/recommender",
      "mongo.db" -> "recommender",
      "es.httpHosts" -> "hadoop100:9200",
      "es.transportHosts" -> "hadoop100:9300",
      "es.index" -> "recommender",
      "es.cluster.name" -> "es-cluster"
    )


    //创建一个sparkConf
    val sparkConf = new SparkConf().setMaster(config("spark.cores")).setAppName("DataLoader")
    //创建一个SparkSession
    //    builder中有一个getOrCreate方法,它是获取一个已经存在的会话,或者没有的情况下创建一个新的会话。
    //    https://zhuanlan.zhihu.com/p/343668901
    val spark = SparkSession.builder().config(sparkConf).getOrCreate()

    //    rdd=> df ds
    //    https://wenku.csdn.net/answer/6b3d109ee8d01601ccd9ac1944772477
    import spark.implicits._

    //加载数据
    val movieRDD = spark.sparkContext.textFile(MOVIE_DATA_PATH)

    //  将数据预处理 字符串分割 => 数组 => 封装 成 Movie类
    //   1^Toy Story (1995)^ ^81 minutes^March 20, 2001^1995^English ^Adventure|Animation|Children|Comedy|Fantasy ^Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn|John Ratzenberger|Annie Potts|John Morris|Erik von Detten|Laurie Metcalf|R. Lee Ermey|Sarah Freeman|Penn Jillette|Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn ^John Lasseter
    val movieDF = movieRDD.map(
      item => {
        //      .split() 里面一般是正则 ^ 的正则 \\^
        val s = item.split("\\^")
        //          scala 数组用()
        //      .split()切割后,一般需要.trim
        Movie(s(0).toInt, s(1).trim, s(2).trim, s(3).trim, s(4).trim, s(5).trim, s(6).trim, s(7).trim, s(8).trim, s(9).trim)
      }
    ).toDF()
    //    mongodb
    //    { "_id" : ObjectId("644b85b62ecfa735d034ce31"), "mid" : 1, "name" : "Toy Story (1995)", "descri" : "", "timelong" : "81 minutes", "issue" : "March 20, 2001", "shoot" : "1995", "language" : "English", "genres" : "Adventure|Animation|Children|Comedy|Fantasy", "actors" : "Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn|John Ratzenberger|Annie Potts|John Morris|Erik von Detten|Laurie Metcalf|R. Lee Ermey|Sarah Freeman|Penn Jillette|Tom Hanks|Tim Allen|Don Rickles|Jim Varney|Wallace Shawn", "directors" : "John Lasseter" }

    val ratingRDD = spark.sparkContext.textFile(RATING_DATA_PATH)
    //    1,31,2.5,1260759144
    val ratingDF = ratingRDD.map(item => {
      val s = item.split(",")
      Rating(s(0).toInt, s(1).toInt, s(2).toDouble, s(3).toInt)
    }).toDF()
    //    mongodb
    //{ "_id" : ObjectId("644b85b62ecfa735d034d83f"), "uid" : 1, "mid" : 31, "score" : 2.5, "timestamp" : 1260759144 }

    //    15,1955,dentist,1193435061
    val tagRDD = spark.sparkContext.textFile(TAG_DATA_PATH)
    val tagDF = tagRDD.map(item => {
      val s = item.split(",")
      Tag(s(0).toInt, s(1).toInt, s(2).trim, s(3).toInt)
    }).toDF()
    //    mongodb
    //    { "_id" : ObjectId("644b85b72ecfa735d035854f"), "uid" : 15, "mid" : 1955, "tag" : "dentist", "timestamp" : 1193435061 }


    //对于配置这样的,每次都需要传并且不变的的参数,可以 隐式定义
    implicit val mongoConfig = MongoConfig(config("mongo.uri"), config("mongo.db"))

    //保存到mongoudb
    storeDataInMongoDB(movieDF, ratingDF, tagDF)

    //数据预处理, 把movie对应的tag信息加入,添加一列 tag1|tag2|... string

    //用sparksql
    //    org.apache.spark.sql.functions是一个Object,提供了约两百多个函数。
    //大部分函数与Hive的差不多。
    //除UDF函数,均可在spark-sql中直接使用。
    //经过import org.apache.spark.sql.functions._ ,也可以用于Dataframe,Dataset。
    //大部分支持Column的函数也支持String类型的列名。这些函数的返回类型基本都是Column。
    //https://blog.csdn.net/qq_33887096/article/details/114532707
    //    简单来说,如果用sparksql里面的函数,就要导入给类
    import org.apache.spark.sql.functions._

    //    groupBy(cols $"列名" )
    //    scala 中 列名 可以用 $"列名"
    /**
     * 用Hive里函数
     * 在tagDF将相同的mid的tag用|连接成tags列
     * movie 对应的tag信息 用|链接 tag1 |tag2|tag3
     * mid tags
     * tags:  tag1 |tag2|tag3
     */
    // select mid, concat_ws("|",collect_set(tag)) as tags
    //from tag
    //group by mid;
    val newTag = tagDF.groupBy($"mid")
      //agg函数经常与groupBy函数一起使用,起到分类聚合的作用;
      //如果单独使用则对整体进行聚合;
      .agg(concat_ws("|", collect_set($"tag")).as("tags"))
      .select("mid", "tags")

    /**
     * 将newTag和movie 左外连接
     * join 默认内链接
     */
    //    select *
    //      from movie m
    //    left join
    //      select *
    //        from newTag t
    //    where m
    //    .mid = t.mid;
    val newMovieDF = movieDF.join(newTag, Seq("mid"), "left")

    implicit val esConfig = ESConfig(config("es.httpHosts"), config("es.transportHosts"), config("es.index"), config("es.cluster.name"))


    //保存到es
    storeDataInEs(newMovieDF)

    spark.stop()

  }

  def storeDataInMongoDB(movieDF: DataFrame, ratingDF: DataFrame, tagDF: DataFrame)(implicit mongoConfig: MongoConfig): Unit = {
    // 新建一个mongodb的连接
    val mongoClient = MongoClient(MongoClientURI(mongoConfig.uri))

    // 如果mongodb中已经有相应的数据库,先删除
    mongoClient(mongoConfig.db)(MONGODB_MOVIE_COLLECTION).dropCollection()
    mongoClient(mongoConfig.db)(MONGODB_RATING_COLLECTION).dropCollection()
    mongoClient(mongoConfig.db)(MONGODB_TAG_COLLECTION).dropCollection()

    // 将DF数据写入对应的mongodb表中
    movieDF.write
      .option("uri", mongoConfig.uri)
      .option("collection", MONGODB_MOVIE_COLLECTION)
      .mode("overwrite")
      .format("com.mongodb.spark.sql")
      .save()

    ratingDF.write
      .option("uri", mongoConfig.uri)
      .option("collection", MONGODB_RATING_COLLECTION)
      .mode("overwrite")
      .format("com.mongodb.spark.sql")
      .save()

    tagDF.write
      .option("uri", mongoConfig.uri)
      .option("collection", MONGODB_TAG_COLLECTION)
      .mode("overwrite")
      .format("com.mongodb.spark.sql")
      .save()

    //对数据表建索引
    mongoClient(mongoConfig.db)(MONGODB_MOVIE_COLLECTION).createIndex(MongoDBObject("mid" -> 1))
    mongoClient(mongoConfig.db)(MONGODB_RATING_COLLECTION).createIndex(MongoDBObject("uid" -> 1))
    mongoClient(mongoConfig.db)(MONGODB_RATING_COLLECTION).createIndex(MongoDBObject("mid" -> 1))
    mongoClient(mongoConfig.db)(MONGODB_TAG_COLLECTION).createIndex(MongoDBObject("uid" -> 1))
    mongoClient(mongoConfig.db)(MONGODB_TAG_COLLECTION).createIndex(MongoDBObject("mid" -> 1))

    mongoClient.close()

  }


  def storeDataInEs(movieDF: DataFrame)(implicit esConfig: ESConfig): Unit = {
    // 新建es配置
    val settings: Settings = Settings.builder().put("cluster.name", esConfig.clustername).build()

    // 新建一个es客户端
    val esClient = new PreBuiltTransportClient(settings)

    //用正则进行集群主机名分割
    val REGEX_HOST_PORT = "(.+):(\\d+)".r
    //    添加集群主机和端口
    esConfig.transportHosts.split(",").foreach {
      case REGEX_HOST_PORT(host: String, port: String) => {
        //        es里面的类InetSocketTransportAddress 需要 java的InetAddress类
        esClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port.toInt))
      }
    }

    //    清洗遗留数据
    if (esClient.admin().indices().exists(new IndicesExistsRequest(esConfig.index))
      .actionGet()
      .isExists
    ) {
      esClient.admin().indices().delete(new DeleteIndexRequest(esConfig.index))
    }
    //创建 库
    esClient.admin().indices().create(new CreateIndexRequest(esConfig.index))

    //    写入数据
    movieDF.write
      .option("es.nodes", esConfig.httpHosts)
      .option("es.http.timeout", "100m")
      .option("es.mapping.id", "mid")
      .mode("overwrite")
      .format("org.elasticsearch.spark.sql")
      .save(esConfig.index + "/" + ES_MOVIE_INDEX)
  }
}

来源:尚硅谷

(9条消息) MongoDB 查看集合中所有的数据_mongodb查询集合所有数据_Tw_light的博客-CSDN博客

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

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

相关文章

python爬虫_正则表达式获取天气预报并用echarts折线图显示

文章目录 ⭐前言⭐python re库💖 re.match函数💖 re.search函数💖 re.compile 函数 ⭐正则获取天气预报💖 正则实现页面内容提取💖 echarts的天气折现图 ⭐结束 ⭐前言 大家好,我是yma16,本文分…

SpringBoot使用EasyExcel批量导出500万数据

SpringBoot使用EasyExcel批量导出500万数据 说明excel版本比较EasyExcel介绍项目目录mysql对应表建表语句pom.xmlapplication.yml配置类启动类代码OrderInfo 实体类OrderInfoExcel excel模版标题类(EasyExcel需要使用这个)TestController控制层接口层TestServiceTestServiceImp…

L298N模块驱动2项4线步进电机的多种方法及其优缺点

摘要:本文将详细介绍L298N模块驱动2项4线步进电机的多种方法,并分析各种方法的优缺点。在实例程序中,将展示不同方法的代码示例,帮助读者理解并实际应用。 引言: 步进电机作为一种常用的电机类型,在许多嵌入…

估值 2 个月从 11 亿美元降到 3 亿美元,投资人清仓跑路,国产大模型创业遇冷...

图片来源:由无界 AI生成 创业未半,而中道崩殂。 6 月 29 日,美团发布公告以 20.65 亿元全资收购光年之外全部权益,距离光年之外正式营业刚过去 84 天。 这是目前中国大模型创业领域最大的收购案,光年之外也在 4 个月时…

HTML5 游戏开发实战 | 黑白棋

黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋、翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。黑白棋的棋盘是一个有88方格的棋盘。开始时在棋盘正中有两白两黑四个棋子交叉放置&#xff0…

观察级水下机器人第一次使用总结2023年6月

最近有个科研项目需要用到ROV,其合同三年之前就签订了,由于疫情的影响,一直没有执行。刚好我们的ROV也验收了,正好派上用场。因为属于ROV使用的菜鸟级,我们邀请厂家无锡智海张工和陈工,中海辉固ROV操作经验…

纵向越权-业务安全测试实操(32)

纵向越权 某办公系统普通用户权限越权提升为系统权限 服务器为鉴别客户端浏览器会话及身份信息,会将用户身份信息存储在 Cookie中, 并发送至客户端存储。攻击者通过尝试修改Cookie中的身份标识为管理员,欺骗服务器分 配管理员权限,达到垂直越权的目的,如图所示。 某办公系…

「原汤话原食」更名「记者下班」,一切才刚刚开始

大家好,我是《原汤话原食》的小黑。这可能是我最后一次这样介绍自己。 毕竟,以后,我就得说,我是《记者下班》的小黑了。 事情是这样的: 2023年7月5日,津津乐道播客网络旗下《原汤话原食》节目正式更名为《记…

Claude使用教程,解决Claude不能回复

Claude是ChatGPT最为有⼒的竞争对⼿之⼀,Claude 的研发公司是专注人工智能安全和研究的初创公司 Anthropic,由前 OpenAI 员工共同创立的。今年 3 月份 Anthropic 获得了谷歌 3 亿美元的投资,谷歌也因此获得其 10% 股份。 ⽬前可以通过官⽹加…

day29-Oracle

0目录 第一章 Oracle 1.1 Oracle表空间-创建: 1.2 Oracle表空间-删除: 1.3 Oracle常用用户(内置):(1)sys 超级用户: 定义:它是Oracle中的超级账户&#xff0…

百度算法提前批 面试复盘

作者 | liu_sy 面试锦囊之面经分享系列,持续更新中 欢迎后台回复"面试"加入讨论组交流噢 写在前面 之前通过非定向内推提前批,简历一直处于筛选状态中,然后大概在牛客看到一个前辈所在部门(推荐搜索)招人&…

【docker】在windows下配置linux深度学习环境并开启ssh远程连接

liunux下配置深度学习程序方便,windows下用起来更习惯。 windows下直接利用虚拟机是不太容易对GPU进行虚拟,利用docker就可以。这里简单介绍了在win主机下如利用docker,配置虚拟机环境,并和主机开启ssh连接配置。 配置与系统要求…

Delta数据湖upsert调优---1000多列表的调优

背景 本文基于 spark 3.1.1 delta 1.0.0 目前在我们公司遇到了一个任务写delta(主要是的upsert操作),写入的时间超过了6个小时,该spark主要的做的事情是: 一行数据变几百行开窗函数去重调用pivot函数 行列的转换&…

Linux 串口工具minicom

Linux minicom Linux中的Minicom是一个串口通信工具,用于与外部设备进行串口通信。它可以用于与嵌入式设备、调试设备、网络设备等进行通信和配置。 调试和配置串口设备:minicom可以用于连接和调试各种串口设备,如调制解调器、路由器、交换…

软件DevOps云化发展的趋势 【课程限时免费】

你了解什么是DevOps吗? 它是怎么诞生的? DevOps能做些什么? 相信对于DevOps的实践者和关注者来说,对它已经不陌生了,但是对于刚刚进入开发者领域不久的小伙伴应该并不清楚,下面就让小智带你一起了解DevO…

node初识

一、什么是node node官网:https://nodejs.cn/ Node.js是一个开源的、跨平台的JavaScript运行环境。它基于Chrome V8 JavaScript引擎,使得JavaScript可以在服务器端运行。Node.js具有事件驱动、非阻塞式I/O的特性,适用于开发高性能的网络应…

ue4_Dota总结 GameMode篇

一:框架设计 新建地图M01; 创建gamemode; 创建gamestate; 创建playercontroller; 创建hud; 创建pawn; 将gamemode设置为M01地图中;将gamestate/playercontroller/hud/pawn添加…

SourceTree 切换分支时提示框 OpenSSH助手验证失败

问题描述: 这是我找的别的图,我自己的图忘记截了,大概意思差不多,就是服务器验证失败: 解决办法 :以下3步 1、命令行输入 ssh-keygen 然后一直下一步,直到结束,密钥和公钥会…

Dbeaver 往s4 HANA自建表 导入数据

今天有一份数据 13W行 需要导入S4 自建表。本来搞了一个通用的自建表导入程序,无奈13W行的数据就是无法读取,200行倒是可以。 那非常时期,用非常手段,尝试了一下刺激,dbeaver 导入到S4 HANA数据 后面试一下&#xff…

【运维工程师学习】磁盘相关知识——磁盘、柱面、磁道、磁头、扇区、格式化

【运维工程师学习】磁盘 1、DOS(Disk Operating System)2、硬盘坏道(1)逻辑坏道(2)物理坏道(3)检查坏道(4)原因(5)修复修复逻辑坏道用Scandisk检查用软件隐藏物理坏道低级格式化修复坏道 3、柱面4、扇区5、磁道6、数据区(1)数据区的内容(2)数据区根目录分…