基于大数据spark+hadoop的图书可视化分析系统

💖🔥作者主页计算机毕设老哥🔥 💖
精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻

Java实战项目专栏

Python实战项目专栏

安卓实战项目专栏

微信小程序实战项目专栏

一、开发介绍

1.1 开发环境

  • 技术栈:spark+hadoop+hive

  • 离线ETL+在线数据分析 (OLAP)+流计算+机器学习+图计算

二、系统介绍

2.1图片展示

注册登录页面:在这里插入图片描述大数据可视化分析模块:在这里插入图片描述在这里插入图片描述在这里插入图片描述管理员后面模块:在这里插入图片描述

三、部分代码设计

package org.pact518

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.recommendation._
import org.apache.spark.rdd.RDD
import scala.math.sqrt
import org.jblas.DoubleMatrix

object alsBatchRecommender {
  private val minSimilarity = 0.6

  def cosineSimilarity(vector1: DoubleMatrix, vector2: DoubleMatrix): Double = vector1.dot(vector2) / (vector1.norm2() * vector2.norm2())

  def calculateAllCosineSimilarity(model: MatrixFactorizationModel, dataDir: String, dateStr: String): Unit = {
    //calculate all the similarity and store the stuff whose sim > 0.5 to Redis.
    val productsVectorRdd = model.productFeatures
      .map{case (movieId, factor) =>
      val factorVector = new DoubleMatrix(factor)
      (movieId, factorVector)
    }
    
    val productsSimilarity = productsVectorRdd.cartesian(productsVectorRdd)
      .filter{ case ((movieId1, vector1), (movieId2, vector2)) => movieId1 != movieId2 }
      .map{case ((movieId1, vector1), (movieId2, vector2)) =>
        val sim = cosineSimilarity(vector1, vector2)
        (movieId1, movieId2, sim)
      }.filter(_._3 >= minSimilarity)
    
    productsSimilarity.map{ case (movieId1, movieId2, sim) => 
      movieId1.toString + "," + movieId2.toString + "," + sim.toString
    }.saveAsTextFile(dataDir + "allSimilarity_" + dateStr)

    productsVectorRdd.unpersist()
    productsSimilarity.unpersist()
  }

  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("alsBatchRecommender").set("spark.executor.memory", "2g")
    val sc = new SparkContext(conf)
    if (args.length < 1) {
        println("USAGE:")
        println("spark-submit ... xxx.jar Date_String [Iteration]")
        println("spark-submit ... xxx.jar 20160424 10")
        sys.exit()
    }
    val dateStr = args(0)

    val iterations = if (args.length > 1) args(1).toInt else 5

    val dataDir = "hdfs://master:9001/leechanx/netflix/"

    val trainData = sc.textFile(dataDir + "trainingData.txt").map{ line =>
      val lineAttrs = line.trim.split(",")
      Rating(lineAttrs(1).toInt, lineAttrs(0).toInt, lineAttrs(2).toDouble)
    }.cache()

    val (rank, lambda) = (50, 0.01)
    val model = ALS.train(trainData, rank, iterations, lambda)

    trainData.unpersist()

    calculateAllCosineSimilarity(model, dataDir, dateStr) //save cos sim.
    model.save(sc, dataDir + "ALSmodel_" + dateStr) //save model.

    val realRatings = sc.textFile(dataDir + "realRatings.txt").map{ line =>
      val lineAttrs = line.trim.split(",")
      Rating(lineAttrs(1).toInt, lineAttrs(0).toInt, lineAttrs(2).toDouble)
    }

    val rmse = computeRmse(model, realRatings)
    println("the Rmse = " + rmse)

    sc.stop()
  }

  def parameterAdjust(trainData: RDD[Rating], realRatings: RDD[Rating]): (Int, Double, Double) = {
    val evaluations =
      for (rank   <- Array(10,  50);
           lambda <- Array(1.0, 0.0001);
           alpha  <- Array(1.0, 40.0))
        yield {
          val model = ALS.trainImplicit(trainData, rank, 10, lambda, alpha)
          val rmse = computeRmse(model, realRatings)
          unpersist(model)
          ((rank, lambda, alpha), rmse)
        }
    val ((rank, lambda, alpha), rmse) = evaluations.sortBy(_._2).head
    println("After parameter adjust, the best rmse = " + rmse)
    (rank, lambda, alpha)
  }

  def computeRmse(model: MatrixFactorizationModel, realRatings: RDD[Rating]): Double = {
    val testingData = realRatings.map{ case Rating(user, product, rate) =>
      (user, product)
    }

    val prediction = model.predict(testingData).map{ case Rating(user, product, rate) =>
      ((user, product), rate)
    }

    val realPredict = realRatings.map{case Rating(user, product, rate) =>
      ((user, product), rate)
    }.join(prediction)

    sqrt(realPredict.map{ case ((user, product), (rate1, rate2)) =>
      val err = rate1 - rate2
      err * err
    }.mean())//mean = sum(list) / len(list)
  }

  def unpersist(model: MatrixFactorizationModel): Unit = {
    // At the moment, it's necessary to manually unpersist the RDDs inside the model
    // when done with it in order to make sure they are promptly uncached
    model.userFeatures.unpersist()
    model.productFeatures.unpersist()
  }
}

<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.github.hellowzk</groupId>
    <artifactId>light-spark</artifactId>
    <version>1.0.4-release</version>
    <packaging>pom</packaging>
    <!--<parent>
        <groupId>org.sonatype.oss</groupId>
        <artifactId>oss-parent</artifactId>
        <version>7</version>
    </parent>-->
    <modules>

        <module>light-spark-core</module>
        <module>assembly</module>
        <module>example</module>
    </modules>

    <properties>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.encoding>${project.build.sourceEncoding}</java.encoding>
        <java.version>1.8</java.version>
        <scala.encoding>${project.build.sourceEncoding}</scala.encoding>
        <scala.version.major>2.11</scala.version.major>
        <scala.version>${scala.version.major}.12</scala.version>
        <spark.version.pre>2.2</spark.version.pre>
        <spark.version>${spark.version.pre}.3</spark.version>
        <hbase.version>1.4.3</hbase.version>
        <hadoop.version>2.6.0-cdh5.13.0</hadoop.version>
        <spark.deploy.mode>cluster</spark.deploy.mode>
        <app.build.profile.id></app.build.profile.id>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>sh</nonFilteredFileExtension>
                        <nonFilteredFileExtension>conf</nonFilteredFileExtension>
                        <nonFilteredFileExtension>json</nonFilteredFileExtension>
                        <nonFilteredFileExtension>txt</nonFilteredFileExtension>
                        <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <id>scala-compile-first</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jvmArgs>
                        <jvmArg>-Xms64m</jvmArg>
                        <!--可以在测试环境修改为1024m,提交时为2048m-->
                        <!--<jvmArg>-Xmx1024m</jvmArg>-->
                        <jvmArg>-Xmx2048m</jvmArg>
                    </jvmArgs>
                    <scalaVersion>${scala.version}</scalaVersion>
                    <args>
                        <arg>-target:jvm-${java.version}</arg>
                    </args>
                </configuration>
            </plugin>

            <!--生成javadoc包的插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.9.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!--生成java源码包插件(仅对java有用,对scala不管用) source-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

    </build>

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <app.build.profile.id>dev</app.build.profile.id>
            </properties>
        </profile>
        <profile>
            <id>spark2.2</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <spark.version.pre>2.2</spark.version.pre>
            </properties>
        </profile>
        <profile>
            <id>spark2.3</id>
            <properties>
                <spark.version.pre>2.3</spark.version.pre>
            </properties>
        </profile>
        <profile>
            <id>spark2.4</id>
            <properties>
                <spark.version.pre>2.4</spark.version.pre>
            </properties>
        </profile>
    </profiles>

    <distributionManagement>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        </snapshotRepository>
        <repository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>
</project>

总结

大家可以帮忙点赞、收藏、关注、评论啦

有问题评论区交流

精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻

Java实战项目专栏

Python实战项目专栏

安卓实战项目专栏

微信小程序实战项目专栏

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: HadoopSpark是目前最流行的大数据处理框架,它们可以用于处理海量数据,进行数据分析和挖掘。以下是一些HadoopSpark数据分析案例: 1. 电商网站用户行为分析:通过HadoopSpark对电商网站的用户行为数据进行分析,可以了解用户的购买习惯、喜好等信息,从而优化产品推荐、促销策略等。 2. 金融风险管理:通过HadoopSpark对金融数据进行分析,可以识别潜在的风险和异常情况,帮助金融机构进行风险管理和预测。 3. 医疗数据分析:通过HadoopSpark对医疗数据进行分析,可以发现疾病的规律和趋势,提高医疗服务的质量和效率。 4. 航空公司客户分析:通过HadoopSpark对航空公司的客户数据进行分析,可以了解客户的旅行习惯、偏好等信息,从而优化航班安排、服务等。 5. 社交媒体分析:通过HadoopSpark对社交媒体的数据进行分析,可以了解用户的兴趣、情感等信息,从而优化广告投放、内容推荐等。 这些案例只是HadoopSpark数据分析的冰山一角,随着大数据技术的不断发展,将会有更多的应用场景涌现。 ### 回答2: 随着大数据时代的到来,数据分析成为了各个企业所关注的重点。而在数据分析中,hadoopspark的应用是不可避免的。hadoop是一种分布式计算平台,可以帮助企业轻松地实现大规模数据的存储和处理;而spark则是一种基于内存计算的框架,可以快速地进行数据处理分析。下面,我们将分别介绍hadoopspark在数据分析中的应用,并提供相应的案例。 Hadoop在数据分析中的应用 1. 数据仓库 hadoop是一种分布式计算平台,可以轻松地实现大规模数据的存储和处理。因此,hadoop非常适合用作数据仓库。通过hadoop的分布式存储技术和MapReduce计算框架,可以将数据存储在分布式文件系统HDFS中,并使用Hive进行数据仓库的建设。通过这种方式,企业可以将各个业务系统中的数据进行整合,便于进行多维度数据分析和数据挖掘。 2. 实时数据分析 hadoop不仅适用于离线数据分析,还可以用于实时数据分析。企业可以通过hadoop的基于流的处理框架Storm进行实时数据处理。Storm可以帮助企业处理流式数据,进行实时的数据过滤、转换、聚合和分析Spark在数据分析中的应用 1. 机器学习 machine learning是数据分析领域的一个热门方向,而spark作为一种高性能的计算框架,可以帮助企业快速地进行机器学习模型的训练和应用。通过Spark的机器学习库MLlib,企业可以使用spark实现各种机器学习算法,并在大规模数据上进行训练和应用。例如,在电商领域,可以利用MLlib进行用户画像、商品推荐等个性化服务。 2. 数据挖掘 Spark可以帮助企业进行数据挖掘,提取数据中的关键信息。例如,在金融领域,可以利用Spark进行欺诈检测和预测;在航空领域,可以利用Spark进行飞行数据的分析和预测,提高飞行安全性。 以上描述的案例只是hadoopspark在数据分析中的一个小部分应用,实际上hadoopspark的应用场景非常广泛,各个领域的企业都可以根据自己的业务需求选择适当的技术。 ### 回答3: HadoopSpark是当今世界上最流行的开源大数据处理框架,它们被广泛应用于处理、存储和分析以往难以处理大数据集。下面我们来说一说Hadoop Spark数据分析案例。 Hadoop是一个开源的分布式文件系统处理框架,用于处理大规模数据集,这里我们来讲解一下Hadoop的案例。 1. 零售行业客户购物行为数据分析 Hadoop用于分析零售行业客户购物行为。基于Hadoop分布式框架,可以有效地进行数据导入、数据处理、结果分析和数据可视化等功能。借助Hive和Pig,可以实现更加复杂的数据分析。 2. 银行信用卡交易监控分析 Hadoop可以分析银行信用卡交易数据,从而提供关键的商业洞察力。通过挖掘海量数据,可以揭示模式和趋势,帮助银行识别潜在问题和机会,改善客户体验和提高利润率。 现在来说一说Spark的案例。 Spark是一个快速通用的开源处理引擎,提供了内置的数据处理API、图形处理API和机器学习API。这里我们来讲一下Spark的分类和语音处理案例。 1. 分类建模 Spark MLlib提供了各种算法和机器学习工具,可以适用于各种类型的分类建模,例如预测客户流失、预测贷款偿还率等。 2. 语音处理 Spark可以用于语音处理,例如从音频中提取有用的特征,以支持语音识别、情感分析等其他用途。近年来,很多国际大厂商都在利用Spark进行语音处理,例如IBM Watson等。 总之,HadoopSpark大数据处理分析领域均有着极大的助益。Hadoop被广泛应用于处理海量数据,Spark则更趋向于统一的数据处理引擎。在实际应用场景中,两者可以相互搭配和协调使用,提供更加完整和高效的解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

计算机毕业设计木哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值