案例: 查询某地的人口数量与平均年龄;

分析:使用Spark查询人口的数量和平均年龄,首先我们使用Spark SQL 方式查询,将原始数据读入,将其转化为DATAFRAME,然后是SQL方式计算:

  1. 准备实验数据代码如下:

    object demo {
      def main(args: Array[String]): Unit = {
        val write = new FileWriter("e://data.txt",false)
        val rand = new Random()
        for (i <- 1 to 1000){
          write.write(i + " " + rand.nextInt(100))
          write.write(System.getProperty("line.separator"))
        }
        write.flush()
        write.close()
      }
    }

2.创建Spark SQL 查询平均年龄

Counts {
  main(args: Array[]): Unit = {
    conf = SparkConf().setAppName().setMaster()
    sc = SparkContext(conf)
    sparkSession = SparkSession.().getOrCreate()
    schema =
         (
              (, IntegerType, ) ::
                (, IntegerType, ) :: )
    people =
          sc.textFile().map(
            _.split()).map(p => (p().trim.toInt, p().trim.toInt))
     dataFrame = sparkSession.createDataFrame(people, schema)
    dataFrame.printSchema()
    dataFrame.createOrReplaceTempView()
    sparkSession.sql().show()
  }
}

3.创建Spark SQL 查询平均人口总数

   

Counts {
  main(args: Array[]): Unit = {
    conf = SparkConf().setAppName().setMaster()
    sc = SparkContext(conf)
    sparkSession = SparkSession.().getOrCreate()
    schema =
         (
              (, IntegerType, ) ::
                (, IntegerType, ) :: )
    people =
          sc.textFile().map(
            _.split()).map(p => (p().trim.toInt, p().trim.toInt))
     dataFrame = sparkSession.createDataFrame(people, schema)
    dataFrame.printSchema()
    dataFrame.createOrReplaceTempView()
    sparkSession.sql().show()
  }
}

总结:在读入数据使用Spark SQL 计算是首先需要知道数据的的结构类型,然后创建相应的数据结构。读入数据将其转换为DATAFRAME。在计算之前可以将数据打印一部分出来看看。