国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第3章 創(chuàng)建項(xiàng)目并初始化業(yè)務(wù)數(shù)據(jù)(過(guò)程記錄)

這篇具有很好參考價(jià)值的文章主要介紹了第3章 創(chuàng)建項(xiàng)目并初始化業(yè)務(wù)數(shù)據(jù)(過(guò)程記錄)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

項(xiàng)目聲明和依賴(lài)

ECommerceRecommendSystem [pom.xml]

  • 公用的聲明、依賴(lài)、插件

properties 聲明

  • log4g:處理日志的框架(日志的具體實(shí)現(xiàn))
  • sel4g:簡(jiǎn)單日志門(mén)面(簡(jiǎn)單日志的接口)
  • mongodb-spark:MongoDB和Spark的接口
  • casbah:MongoDB在scala上的Driver(最新的有MongoScalaDriver)
  • redis、kafka、spark、scala
  • jblas:java線性代數(shù)庫(kù)(矩陣運(yùn)算)

dependences 依賴(lài)

  • dependencies:聲明+引入
  • dependencyManagement:聲明,不引入
<dependencies>
    <!-- 引入共同的日志管理工具 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
</dependencies>

plugin 插件

  • plugin:聲明+引入

  • pluginManagement:聲明,不引入

  • scala引用可能有問(wèn)題(recommender)
    第3章 創(chuàng)建項(xiàng)目并初始化業(yè)務(wù)數(shù)據(jù)(過(guò)程記錄),# 【大數(shù)據(jù)開(kāi)發(fā)】,大數(shù)據(jù)

  • 注意版本號(hào)需要文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-539559.html


數(shù)據(jù)加載模塊

  • Object:?jiǎn)卫?xiàng)目

package com.aguigu

import com.mongodb.MongoClientURI
import com.mongodb.casbah.Imports.MongoClientURI
import com.mongodb.casbah.MongoClient
import com.mongodb.casbah.commons.MongoDBObject
import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SparkSession}

/** 樣例類(lèi)
 * Product數(shù)據(jù)集
 * 3982                           商品ID
 * Fuhlen 富勒 M8眩光舞者時(shí)尚節(jié)能     商品名稱(chēng)
 * 1057,439,736                   商品分類(lèi)ID,不需要
 * B009EJN4T2                      亞馬遜ID,不需要
 * https://images-cn-4.ssl-image   商品的圖片URL
 * 外設(shè)產(chǎn)品|鼠標(biāo)|電腦/辦公           商品分類(lèi)
 * 富勒|鼠標(biāo)|電子產(chǎn)品|好用|外觀漂亮   商品UGC標(biāo)簽
 */
case class Product( productId:Int, name:String, URL:String, categories:String, tags:String )

/**
 * Rating數(shù)據(jù)集
 * 4867        用戶ID
 * 457976      商品ID
 * 5.0         評(píng)分
 * 1395676800  時(shí)間戳
 */
case class Rating( userId: Int, productId: Int, score: Double, timestamp: Int )

/**
 * MongoDB連接配置
 * @param uri    MongoDB的連接uri
 * @param db     要操作的db
 */
case class MongoConfig( uri: String, db: String )

object DataLoader {
  // 常量
  val PRODUCT_DATA_PATH = "/Users/liuhao/MyProject/ECommerceRecommendSystem/ECommerceRecommendSystem/recommender/DataLoader/src/main/resources/products.csv"
  val RATING_DATA_PATH = "/Users/liuhao/MyProject/ECommerceRecommendSystem/ECommerceRecommendSystem/recommender/DataLoader/src/main/resources/ratings.csv"
  // 定義mongodb中存儲(chǔ)的表名
  val MONGODB_PRODUCT_COLLECTION = "Product"
  val MONGODB_RATING_COLLECTION = "Rating"

  def main(args: Array[String]): Unit = {
    /**
     * 配置項(xiàng)
     */
    val config = Map(
      "spark.cores" -> "local[*]", // 所有邏輯核占用
      "mongo.uri" -> "mongodb://localhost:27017/recommender", // MongoDB數(shù)據(jù)庫(kù)連接
      "mongo.db" -> "recommender"
    )

    /**
     * 創(chuàng)建Spark相關(guān):sparkConf, sparkSession
     */
    // 創(chuàng)建 spark config
    val sparkConf = new SparkConf().setMaster(config("spark.cores")).setAppName("DataLoader")

    // 創(chuàng)建 spark session
    val spark = SparkSession.builder().config(sparkConf).getOrCreate()

    /**
     * 加載數(shù)據(jù)
     */
    import spark.implicits._

    val productRDD = spark.sparkContext.textFile(PRODUCT_DATA_PATH)
    // RDD => DataFrame
    val productDF = productRDD.map( item => {
      // product數(shù)據(jù)通過(guò)'^'分割
      val attr = item.split("\\^")
      // 轉(zhuǎn)換成product類(lèi)
      Product( attr(0).toInt, attr(1).trim, attr(4).trim, attr(5).trim, attr(6).trim )
    }).toDF()

    val ratingRDD = spark.sparkContext.textFile(RATING_DATA_PATH)
    val ratingDF = ratingRDD.map(item => {
      val attr = item.split(",")
      Rating(attr(0).toInt, attr(1).toInt, attr(2).toDouble, attr(3).toInt)
    }).toDF()

    implicit val mongoConfig = MongoConfig( config("mongo.uri"), config("mongo.db"))  // 隱式配置
    storeDataInMongoDB( productDF, ratingDF )

    spark.stop()
  }

  def storeDataInMongoDB( productDF:DataFrame, ratingDF:DataFrame)(implicit mongoConfig: MongoConfig): Unit ={
    // 新建mongodb連接(casbah),客戶端
    val mongoClinet = MongoClient(MongoClientURI(mongoConfig.uri) )
    // 定義要操作的mongodb表,理解:db.product
    val productCollection = mongoClinet( mongoConfig.db )( MONGODB_PRODUCT_COLLECTION )
    val ratingCollection = mongoClinet( mongoConfig.db )( MONGODB_RATING_COLLECTION )

    // 方式1:如果表已存在,則刪除
    productCollection.dropCollection()
    ratingCollection.dropCollection()

    // 方式2:將當(dāng)前數(shù)據(jù)存入對(duì)應(yīng)表
    productDF.write
      .option("uri", mongoConfig.uri)
      .option("collection", MONGODB_PRODUCT_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()

    // 對(duì)表創(chuàng)建索引
    productCollection.createIndex( MongoDBObject( "productId" -> 1 ) )
    ratingCollection.createIndex( MongoDBObject( "productId" -> 1 ) )
    ratingCollection.createIndex( MongoDBObject( "userId" -> 1 ) )

    mongoClinet.close()

  }
}

到了這里,關(guān)于第3章 創(chuàng)建項(xiàng)目并初始化業(yè)務(wù)數(shù)據(jù)(過(guò)程記錄)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Git】git初始化項(xiàng)目時(shí) | git默認(rèn)創(chuàng)建main分之 | 如何將git默認(rèn)分支從main改為master

    在 Git 中,如果你在第一次提交后想要將默認(rèn)分支名從 main 修改為 master,你可以按照以下步驟進(jìn)行操作: 創(chuàng)建 master 分支: 首先,你需要在當(dāng)前的 main 分支基礎(chǔ)上創(chuàng)建一個(gè)新的 master 分支。使用以下命令: 刪除 main 分支: 現(xiàn)在你已經(jīng)創(chuàng)建了一個(gè)新的 master 分支,可以將 main

    2024年02月08日
    瀏覽(16)
  • SqlSession的初始化過(guò)程

    mybatis-config.xml db.properties 首先來(lái)看 SqlSessionFactory 的構(gòu)建過(guò)程,調(diào)用重載方法解析配置文件內(nèi)容,將配置信息裝載到Configuration對(duì)象中。 得到最終的SqlSessionFactory 接下來(lái)我們繼續(xù)分析通過(guò) DefaultSqlSessionFactory 工廠方法獲得 SqlSession 的邏輯 這之中做了幾件事情: 創(chuàng)建事務(wù)工廠 創(chuàng)

    2024年02月03日
    瀏覽(22)
  • Java項(xiàng)目初始化ES、MYSQL表結(jié)構(gòu)及表數(shù)據(jù)

    其中SystemMapper為 ?如果索引不存在就創(chuàng)建es索引 ? ?根據(jù)需要、添加es別名

    2024年02月12日
    瀏覽(29)
  • 常見(jiàn)問(wèn)題03:SpringBoot項(xiàng)目啟動(dòng)初始化數(shù)據(jù)(執(zhí)行sql文件)

    常見(jiàn)問(wèn)題03:SpringBoot項(xiàng)目啟動(dòng)初始化數(shù)據(jù)(執(zhí)行sql文件)

    使用外部資源中定義的 SQL 腳本填充、初始化或清理數(shù)據(jù)庫(kù)。 調(diào)用addScript(org.springframework.core.io.Resource)以添加單個(gè) SQL 腳本位置。 調(diào)用addScripts(org.springframework.core.io.Resource…)以添加多個(gè) SQL 腳本位置。 請(qǐng)參閱此類(lèi)中的 setter 方法以獲取更多配置選項(xiàng)。 調(diào)用populate(java.sql.Connect

    2024年02月13日
    瀏覽(34)
  • spring事物初始化過(guò)程分析

    spring事物初始化過(guò)程分析

    1.注入4個(gè)bd 2.執(zhí)行 org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessBeforeInstantiation 邏輯分析:遍歷所有的bd: 獲取beanname-判斷beanname是否有長(zhǎng)度并且沒(méi)有被處理過(guò)-是否遍歷放入advisedBeans- 是否是基礎(chǔ)類(lèi)-是否該跳過(guò) ?4大基礎(chǔ)類(lèi) 3.執(zhí)行org.springframework.aop.framework.autoprox

    2024年02月02日
    瀏覽(20)
  • Cisco交換機(jī)初始化過(guò)程跟蹤

    公司有幾臺(tái)交換機(jī)需要初始化配置,這里帖出過(guò)程,給大家參考下。 此初始化過(guò)程只測(cè)試過(guò)Cisco 2960和3550系列交換機(jī),方法可用。 感謝測(cè)試過(guò)程中對(duì)我提出幫助的。 一:知道交換機(jī)特權(quán)密碼的情況下 如果你知道交換機(jī)的特權(quán)密碼,那初始化就相當(dāng)easy了. ? 二、不知道特權(quán)密

    2024年02月05日
    瀏覽(18)
  • VMWare 虛擬機(jī)創(chuàng)建 + 初始化

    VMWare 虛擬機(jī)創(chuàng)建 + 初始化

    目錄 概述 1. VMware創(chuàng)建虛擬機(jī) 2. IP 配置 nmtui nmcli 3. Yum 源配置 光盤(pán)的Packages作為Yum源 配置開(kāi)機(jī)自動(dòng)掛載(光盤(pán)) 配置私有Yum倉(cāng)庫(kù) 跟新私有yum倉(cāng)庫(kù) ?報(bào)錯(cuò)和修復(fù) 4. 文件共享系統(tǒng)配置 跟新配置文件/etc/hosts + /etc/yum.repo.d/ftp.repo ?同步配置文件 測(cè)試yum私有倉(cāng)庫(kù) 5. Ansible 安裝配置 ?s

    2024年02月05日
    瀏覽(24)
  • K8S集群重新初始化--詳細(xì)過(guò)程

    K8S集群重新初始化--詳細(xì)過(guò)程

    在引導(dǎo)k8s集群的過(guò)程時(shí)可能因?yàn)檫@個(gè)或那個(gè)的原因?qū)е滦枰匦乱龑?dǎo)集群 。 下面整理了我在實(shí)際工作中初始化k8s集群的詳細(xì)過(guò)程。 k8s環(huán)境部署總覽 ip地址 類(lèi)型 操作系統(tǒng) 服務(wù)配置 192.168.162.31 Master01 Centos7.6 2核CPU 2G內(nèi)存 20G硬盤(pán) 192.168.162.41 node1 Centos7.6 2核CPU 2G內(nèi)存 20G硬盤(pán) 192

    2024年02月02日
    瀏覽(22)
  • Python如何創(chuàng)建二維數(shù)組和初始化

    Python如何創(chuàng)建二維數(shù)組和初始化

    ????????嚴(yán)格意義上說(shuō),Python中并沒(méi)有數(shù)組的概念,Python中表達(dá)一組數(shù)據(jù)有多種形式,例如list,tuple,set等數(shù)據(jù)結(jié)構(gòu)都可以表達(dá)一組數(shù),并且這組數(shù)也沒(méi)有C和C++中數(shù)組的的同質(zhì)限制,這些數(shù)可以是任何一種數(shù)據(jù)類(lèi)型。 ? ? ? ? 以list為例(list又叫列表),要想實(shí)現(xiàn)一個(gè)所

    2024年02月20日
    瀏覽(25)
  • ElasticSearch沒(méi)有記錄初始化用戶名密碼

    ElasticSearch沒(méi)有記錄初始化用戶名密碼

    初次使用啟動(dòng)ES時(shí)會(huì)初始化用戶名:elastic,密碼是隨機(jī)生成的,在初次啟動(dòng)時(shí)控制臺(tái)會(huì)展示相關(guān)信息(包含初始化密碼),此時(shí)要注意保存,否則之后啟動(dòng)不會(huì)再顯示。 對(duì)于我而言,我初次啟動(dòng)時(shí)沒(méi)有保存記錄密碼,導(dǎo)致開(kāi)啟安全策略后無(wú)法通過(guò)用戶密碼登陸,并且我找了

    2024年02月10日
    瀏覽(32)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包