SparkSQL环境搭建、SQL VS DSL

本文展示了如何使用Spark SQL处理CSV数据,包括读取、转换、统计单词频率以及利用窗口函数计算累计收入和增长率。示例中详细演示了DataFrame API和DSL两种方法,涉及explode、sum、lag等函数。
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.4.5</version>
</dependency>
package com.shujia.sql

import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession}

object Demo01SparkSessio {
  def main(args: Array[String]): Unit = {
    //创建一个Spark SQL的入口 SparkSession
    val spark: SparkSession = SparkSession
      .builder()
      .appName("Demo01SparkSessio")
      .master("local")
      .getOrCreate()

    //获取SparkContext
    val sc: SparkContext = spark.sparkContext

    //通过SparkContext读取文件
    val stuRDD: RDD[String] = sc.textFile("Spark/data/students.txt")

    //打印
    stuRDD.take(10).foreach(println)

    //通过SparkSession读取文件
    val stuDF: DataFrame = spark
      .read
      .format("csv") //指定读取文件的格式
      .option("sep", ",") //指定分隔符
      .schema("id String,name String,age Int,gender String,clazz String")
      .load("Spark/data/students.txt")

    //打印
    stuDF.show(10)//指定打印的行数
    stuDF.show(5,false)//如果某列数据太长 默认会被截断
    stuDF.show()//如果什么都不指定 默认打印20条
  }
}

1500100001,施笑槐,22,女,文科六班
1500100002,吕金鹏,24,男,文科六班
1500100003,单乐蕊,22,女,理科六班
1500100004,葛德曜,24,男,理科三班
1500100005,宣谷芹,22,女,理科五班
1500100006,边昂雄,21,男,理科二班
1500100007,尚孤风,23,女,文科六班
1500100008,符半双,22,女,理科六班
1500100009,沈德昌,21,男,理科一班
1500100010,羿彦昌,23,男,理科六班

+----------+------+---+------+--------+
|        id|  name|age|gender|   clazz|
+----------+------+---+------+--------+
|1500100001|施笑槐| 22|    女|文科六班|
|1500100002|吕金鹏| 24|    男|文科六班|
|1500100003|单乐蕊| 22|    女|理科六班|
|1500100004|葛德曜| 24|    男|理科三班|
|1500100005|宣谷芹| 22|    女|理科五班|
|1500100006|边昂雄| 21|    男|理科二班|
|1500100007|尚孤风| 23|    女|文科六班|
|1500100008|符半双| 22|    女|理科六班|
|1500100009|沈德昌| 21|    男|理科一班|
|1500100010|羿彦昌| 23|    男|理科六班|
+----------+------+---+------+--------+
only showing top 10 rows

+----------+------+---+------+--------+
|id        |name  |age|gender|clazz   |
+----------+------+---+------+--------+
|1500100001|施笑槐|22 |女    |文科六班|
|1500100002|吕金鹏|24 |男    |文科六班|
|1500100003|单乐蕊|22 |女    |理科六班|
|1500100004|葛德曜|24 |男    |理科三班|
|1500100005|宣谷芹|22 |女    |理科五班|
+----------+------+---+------+--------+
only showing top 5 rows


+----------+------+---+------+--------+
|        id|  name|age|gender|   clazz|
+----------+------+---+------+--------+
|1500100001|施笑槐| 22|    女|文科六班|
|1500100002|吕金鹏| 24|    男|文科六班|
|1500100003|单乐蕊| 22|    女|理科六班|
|1500100004|葛德曜| 24|    男|理科三班|
|1500100005|宣谷芹| 22|    女|理科五班|
|1500100006|边昂雄| 21|    男|理科二班|
|1500100007|尚孤风| 23|    女|文科六班|
|1500100008|符半双| 22|    女|理科六班|
|1500100009|沈德昌| 21|    男|理科一班|
|1500100010|羿彦昌| 23|    男|理科六班|
|1500100011|宰运华| 21|    男|理科三班|
|1500100012|梁易槐| 21|    女|理科一班|
|1500100013|逯君昊| 24|    男|文科二班|
|1500100014|羿旭炎| 23|    男|理科五班|
|1500100015|宦怀绿| 21|    女|理科一班|
|1500100016|潘访烟| 23|    女|文科一班|
|1500100017|高芷天| 21|    女|理科五班|
|1500100018|骆怜雪| 21|    女|文科六班|
|1500100019|娄曦之| 24|    男|理科三班|
|1500100020|杭振凯| 23|    男|理科四班|
+----------+------+---+------+--------+
only showing top 20 rows

package com.shujia.sql

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Row, SparkSession}

object Demo02WordCount {
  def main(args: Array[String]): Unit = {
    //创建SparkSession
    val spark: SparkSession = SparkSession
      .builder()
      .appName("Demo02WordCount")
      .master("local")
      .config("s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值