本課主題

  • DataSet 实战

DataSet 实战

SparkSession 是 SparkSQL 的入口,然后可以基于 sparkSession 来获取或者是读取源数据来生存 DataFrameReader,在 Spark 2.x 版本中已经没有 DataFrame 的 API,它变成了 DataSet[Row] 类型的数据。

  1. 创建 SparkSession

    val spark = SparkSession
    .builder()
    .master("local")
    .appName("Spark SQL Basic Examples")
    .getOrCreate()
  2. 导入隐式转换的方法
    import spark.implicits._
    import org.apache.spark.sql.types._ // 自定义schema时导入
  3. 创建 DataFrame 即 DataSet[Row] 类型数据。

    val df = spark.read.json("src/main/resources/general/people.json")
    • 可以直接调用 DataFrame 很多很好用的方法,比如 select( ),filter( ),groupBy( )

      df.show() //打印数据,默认是前20条数据
      df.printSchema()
      df.select("name").show() //提取column是name的数据
      df.select($"name",$"age" + 1).show() //提取column是name和age+1的数据
      df.filter($"age" > 25).select("name").show()
      df.groupBy($"age").count().show()
  4. 也可以自定义 case class 来创建 DataSet[Row] 类型
    val personDF = sc.textFile("src/main/resources/general/people.txt") //personRDD
    .map(x => x.split(",")) //Array[String] = Array(name, age)
    .map(attr => Person(attr(0),attr(1).trim().toInt))
    .toDF()
  5. 或者用自定义 schema 的方式
    val schemaString = "name,age"
    val fields = schemaString.split(",").map(fieldName => StructField(fieldName, StringType, nullable = true))
    val schema = StructType(fields) val personRDD = sc.textFile("src/main/resources/general/people.txt") //personRDD
    val rowRDD = personRDD.map(_.split(",")).map(attr => Row(attr(0),attr(1).trim()))
    val personDF = spark.createDataFrame(rowRDD,schema)
    • 或者是调用 createOrReplaceTempView 方法来创建临时表运行 SQL

      personDF.createOrReplaceTempView("people")
      val sqlDF = spark.sql("SELECT * FROM people")
      sqlDF.map(people => "Name: " + people(0)).show()

參考資料

资料来源来至 Spark 官方网站

[Spark SQL] SparkSession、DataFrame 和 DataSet 练习的更多相关文章

  1. spark结构化数据处理:Spark SQL、DataFrame和Dataset

    本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但 ...

  2. Spark SQL、DataFrame和Dataset——转载

    转载自:  Spark SQL.DataFrame和Datase

  3. Spark学习之路(八)—— Spark SQL 之 DataFrame和Dataset

    一.Spark SQL简介 Spark SQL是Spark中的一个子模块,主要用于操作结构化数据.它具有以下特点: 能够将SQL查询与Spark程序无缝混合,允许您使用SQL或DataFrame AP ...

  4. Spark 系列(八)—— Spark SQL 之 DataFrame 和 Dataset

    一.Spark SQL简介 Spark SQL 是 Spark 中的一个子模块,主要用于操作结构化数据.它具有以下特点: 能够将 SQL 查询与 Spark 程序无缝混合,允许您使用 SQL 或 Da ...

  5. spark算子之DataFrame和DataSet

    前言 传统的RDD相对于mapreduce和storm提供了丰富强大的算子.在spark慢慢步入DataFrame到DataSet的今天,在算子的类型基本不变的情况下,这两个数据集提供了更为强大的的功 ...

  6. Spark SQL 之 DataFrame

    Spark SQL 之 DataFrame 转载请注明出处:http://www.cnblogs.com/BYRans/ 概述(Overview) Spark SQL是Spark的一个组件,用于结构化 ...

  7. 转】Spark SQL 之 DataFrame

    原博文出自于: http://www.cnblogs.com/BYRans/p/5003029.html 感谢! Spark SQL 之 DataFrame 转载请注明出处:http://www.cn ...

  8. Spark RDD、DataFrame和DataSet的区别

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   转载请标明出处:小帆的帆的专栏 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接通过类 ...

  9. Spark官方1 ---------Spark SQL和DataFrame指南(1.5.0)

    概述 Spark SQL是用于结构化数据处理的Spark模块.它提供了一个称为DataFrames的编程抽象,也可以作为分布式SQL查询引擎. Spark SQL也可用于从现有的Hive安装中读取数据 ...

随机推荐

  1. html Embed用法 页面播放视频

    一句话概括所有问题.查资料说在页面播放视频都是一些插件 刚发现一个Html自带的标签 很吊的样子 <div >          <embed  src="${compla ...

  2. 【Java入门提高篇】Day7 Java内部类——局部内部类

    今天介绍第二种内部类--局部内部类. 局部内部类是什么?顾名思义,那就是定义在局部内部的类(逃).开玩笑的,局部内部类就是定义在代码块.方法体内.作用域(使用花括号"{}"括起来的 ...

  3. 自学Zabbix3.9.3-模板Templates-嵌套Nesting

    自学Zabbix3.9.3-模板Templates-嵌套Nesting 嵌套是一个模板包含一个或多个其他模板的方法.可以在一个"嵌套"模板中将一些模板链接在一起.嵌套的好处在于,只 ...

  4. 程序员最常用的Linux命令

    命令 用法 说明 pwd pwd 显示当前所在目录 ls ls -al 以列表形式,显示当前目录下的所有文件和目录,大多数情况可直接用ll cd cd  /home/hadoop/hbase/ 进入到 ...

  5. Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.6.RELEASE:repackage failed: Unable to find main class

    异常 [INFO] --- spring-boot-maven-plugin:1.5.6.RELEASE:repackage (default) @ spring-boot-starter-log - ...

  6. 小白的Python之路 PEP8 代码风格

    转载自http://www.douban.com/note/134971609/ Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下 ...

  7. 修改文件系统属性chattr,查看文件系统属性lsattr

    chattr chattr +i 文件或目录 , chattr +a 文件或目录,chattr -i 文件或目录,chattr -a 文件或目录,chattr =i 文件或目录,chattr =a 文 ...

  8. JMeter获取JSON内容

    source("D:\\apache-jmeter-3.0\\用例\\Test.java"); public static void f(){ String response_da ...

  9. iOS支付宝支付相关问题

    支付宝实现以及相关问题:http://www.jianshu.com/p/f81578954974 1.支付宝支付流程 1.用户点击支付2.客户端请求服务器用户支付3.服务器接收请求生成金额订单等要给 ...

  10. 第四节:dingo/API 最新版 V2.0 之 Responses (连载)

    因为某些某些原因,不能按时更新,唉.我会尽力,加快速度.(这句话不是翻译的哈) 原文地址--> https://github.com/dingo/api/wiki/Responses A fun ...