spark3.0-SparkSQL DSL-分组查询

说明

通过 DSL 实现分组查询

代码:

import org.apache.spark.SparkConf
import org.apache.spark.sql.catalyst.ScalaReflection
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.{DataFrame, SparkSession}

import java.sql.Timestamp

object Std4DSL {

  case class Cdz(id: String, eleNum: Integer, time:Integer, startTime: Timestamp, endTime: Timestamp)

  def main(args: Array[String]): Unit = {
    val sc = new SparkConf().setMaster("local[*]").setAppName("std")
    //创建SparkSession
    val ss: SparkSession = SparkSession.builder().config(sc).getOrCreate()
    ss.conf.set("spark.sql.shuffle.partitions", 1)

    val df: DataFrame = ss.read
      .option("header", "false") //默认为false,表示第一行不是表头
      .option("sep", ",") //列分隔符
      // 根据 样例类的主构造形参的顺序 匹配 文件的 列顺序
      .schema(ScalaReflection.schemaFor[Cdz].dataType.asInstanceOf[StructType]) // 指定类型
      .csv("cdz.txt") //读取文件

    val resDF = df
      .where("eleNum > 100")
      .groupBy("id")
      .sum("eleNum")


    resDF.printSchema()
    resDF.show()

    ss.stop()

  }
}

原文出处:/show_1IX4RXGHpebt.html