SparkSQL的小案例

class ApacheAccessLog(
                       var ipAddress:String,//地址
                       var clientIndextd:String,//标示符
                       var userID:String,//用户的id
                       var dateTime:String,//日期
                       var method:String,//请求方式
                       var endPoint:String,//目标地址
                       var responseCode:Int,//网页请求状态码
                       var contentSize:Long //内容大小
                     ) {
}

object ApacheAccessLog{
  def parseLog(log:String):ApacheAccessLog={
      val logArray = log.split("#")
      val url = logArray(4).split("/")
      new ApacheAccessLog(logArray(0),logArray(1),logArray(2),logArray(4),url(0),url(1),logArray(5).toInt,logArray(6).toLong)
  }

}



package lesson02

import org.apache.spark.sql.{DataFrame, SQLContext}
import org.apache.spark.{SparkConf, SparkContext}

object ApacheLogBySql {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("sql").setMaster("local")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)

    val logFile = sc.textFile("D:\\log.txt")
    val ApacheLog = logFile.map(line => ApacheAccessLog.parseLog(line))
    import sqlContext.implicits._
    val df:DataFrame = ApacheLog.toDF()
    df.registerTempTable("log")
    //SparkSQL的调优,将注册的表存在缓存中
    sqlContext.cacheTable("log")

    /**
      * 需求一:The average, min, and max content size of responses returned from the server.
      */
    val sql1=
      """
         select avg(contentSize),min(contentSize),max(contentSize) from log
      """
    sqlContext.sql(sql1)
    /**
      *需求而: A count of response code's returned.
      */
    val sql2=
      """
         select
            responseCode,count(*)
         from
            log
         group by
            responseCode
      """
    sqlContext.sql(sql2)

    /**
      * 需求三:All IPAddresses that have accessed this server more than N times. 3
      */

    val sql3=
      """
         select
          ipAddress,count(*) as total
         from
           log
         group by
           ipAddress
         having
           total > 1

      """
    sqlContext.sql(sql3);
    /**
      * 需求四:The top endpoints requested by count.
      */
    val sql4=
      """
           select
               endPoint,count(*) as count
            from
               log
            group by
               endPoint
            order by
               count desc
            limit 2

      """
    sqlContext.sql(sql4)


  }
}



当然,我可以为您提供一些Spark SQL案例。以下是一个简单的案例,演示如何使用Spark SQL来处理和分析数据。 案例:统计销售数据 假设我们有一个包含销售数据的表,其中包括产品名称、销售数量和销售日期等字段。我们想要使用Spark SQL来分析这些数据并生成一些统计结果。 首先,我们需要创建一个SparkSession对象,并加载销售数据为一个DataFrame对象。 ```python from pyspark.sql import SparkSession # 创建SparkSession对象 spark = SparkSession.builder \ .appName("Spark SQL Example") \ .getOrCreate() # 加载销售数据为DataFrame sales_df = spark.read \ .format("csv") \ .option("header", "true") \ .load("sales_data.csv") ``` 然后,我们可以使用SQL语句来查询和分析数据。例如,我们可以通过执行SQL查询来获取每个产品的总销售数量。 ```python # 创建临时视图 sales_df.createOrReplaceTempView("sales") # 执行SQL查询 result = spark.sql("SELECT product_name, sum(sales_quantity) as total_sales FROM sales GROUP BY product_name") # 显示结果 result.show() ``` 除了基本的统计分析,我们还可以使用Spark SQL执行更复杂的操作,如连接多个表,使用窗口函数进行数据分析等。 这只是一个简单的案例,展示了如何使用Spark SQL来处理和分析数据。根据您具体的需求,您可以进一步扩展和定制这个案例。希望对您有所帮助!如果您有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值