05-快速理解SparkSQL的DataSet

这篇具有很好参考价值的文章主要介绍了05-快速理解SparkSQL的DataSet。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 定义

一个数据集是分布式的数据集合。Spark 1.6增加新接口Dataset,提供

  • RDD的优点:强类型、能够使用强大lambda函数
  • Spark SQL优化执行引擎的优点

可从JVM对象构造Dataset,然后函数式转换(map、flatMap、filter等)操作。Dataset API在Scala和Java中可用。

Python不支持Dataset API,但由于Python动态性质,许多Dataset API优点已经能使用(可通过名称自然访问行的字段row.columnName)。R的情况类似。

Python支持DataFrame API是因为DataFrame API是基于Python#Pandas库构建,而Pandas库提供强大易用的数据分析工具集。因此,Spark提供对Pandas DataFrame对象的支持,使Python使用DataFrame API非常方便。Python的Pandas也提供强类型保证,使Spark可在保持动态特性同时提供类型检查和类型推断。因此,虽Python不支持Spark的Dataset API,但它支持Spark的DataFrame API,这为Python用户提供一种方便的数据处理方式。

2 案例

package com.javaedge.bigdata.cp04

import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}

object DatasetApp {

  def main(args: Array[String]): Unit = {
    val projectRootPath = "/Users/javaedge/Downloads/soft/sparksql-train"
    val spark = SparkSession.builder()
      .master("local").appName("DatasetApp")
      .getOrCreate()
    import spark.implicits._

    // 创建一个包含一条记录的Seq,这条记录包含一个名为 "JavaEdge" 年龄为 18 的人员信息
    val ds: Dataset[Person] = Seq(Person("JavaEdge", "18"))
      // 将Seq转换为一个Dataset[Person]类型数据集,该数据集只包含一条记录
      .toDS()
    ds.show()

    val primitiveDS: Dataset[Int] = Seq(1, 2, 3).toDS()
    primitiveDS.map(x => x + 1).collect().foreach(println)

    val peopleDF: DataFrame = spark.read.json(projectRootPath + "/data/people.json")
    val peopleDS: Dataset[Person] = peopleDF.as[Person]
    peopleDS.show(false)
    peopleDF.select("name").show()
    peopleDS.map(x => x.name).show()

    spark.stop()
  }

  /**
   * 自定义的 case class,其中包含两个属性
   */
  private case class Person(name: String, age: String)

}

output:
+--------+---+
|    name|age|
+--------+---+
|JavaEdge| 18|
+--------+---+

2
3
4
+----+-------+
|age |name   |
+----+-------+
|null|Michael|
|30  |Andy   |
|19  |Justin |
+----+-------+

+-------+
|   name|
+-------+
|Michael|
|   Andy|
| Justin|
+-------+

+-------+
|  value|
+-------+
|Michael|
|   Andy|
| Justin|
+-------+

3 DataFrame V.S Dataset

val peopleDF: DataFrame = spark.read.json(projectRootPath + "/data/people.json")
val peopleDS: Dataset[Person] = peopleDF.as[Person]
peopleDS.show(false)
// 弱语言类型,运行时才报错
peopleDF.select("nameEdge").show()

05-快速理解SparkSQL的DataSet

编译期报错:

05-快速理解SparkSQL的DataSet

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&优惠券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化

目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

  • 编程严选网

本文由博客一文多发平台 OpenWrite 发布!文章来源地址https://www.toymoban.com/news/detail-843111.html

到了这里,关于05-快速理解SparkSQL的DataSet的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【深度学习】自定义数据集对象mydataset |继承torch.utils.data.Dataset类

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 与datasets.ImageFolder类似,深度学习课题中还有一种很常用的自定义数据集的方法: 继承torch.utils.data.Dataset类 可以参考我之前的博客:【深度学习】datasets.ImageFolder 使用方法 datasets.ImageFolder返回的对象和

    2024年02月04日
    浏览(27)
  • U2Net、U2NetP分割模型训练---自定义dataset、训练代码训练自己的数据集

    U2Net、U2NetP分割模型训练---自定义dataset、训练代码训练自己的数据集

    前言 博客很久没有更新了,今天就来更新一篇博客吧,哈哈; 最近在做图像分割相关的任务,因此,写这么一篇博客来简单实现一下分割是怎么做的,内容简单,枯燥,需要耐心看,哈哈; 博客的内容相对简单,比较适合刚接触分割的同学参考学习(这篇博客在算法训练上

    2024年02月05日
    浏览(8)
  • 如何使用pytorch的Dataset, 来定义自己的Dataset

    如何使用pytorch的Dataset, 来定义自己的Dataset

    Dataset与DataLoader的关系 Dataset: 构建一个数据集,其中含有所有的数据样本 DataLoader:将构建好的Dataset,通过shuffle、划分batch、多线程num_workers运行的方式,加载到可训练的迭代容器。 实战1:CSV数据集(结构化数据集) 实战2:图片数据集 ├── flower_data —├── flower_photo

    2024年01月22日
    浏览(7)
  • SparkSQL函数定义——UDF函数,窗口函数

    目录 1 定义UDF函数  1.1  返回值是数组类型的UDF定义 1.2 返回字典类型的UDF定义 2 窗口函数 目前python仅支持UDF 两种定义方式: 1. sparksession.udf.register() 注册的UDF可以用于DSL和SQL 返回值用于DSL风格,传参内给的名字用于SQL风格         方法一语法: udf对象 =  sparksession.ud

    2024年02月06日
    浏览(9)
  • Pytorch中Dataset和dadaloader的理解

    Pytorch中Dataset和dadaloader的理解

    不同的数据集在形式上千差万别,为了能够统一用于模型的训练,Pytorch框架下定义了一个dataset类和一个dataloader类。 dataset用于获取数据集中的样本,dataloader 用于抽取部分样本用于训练。比如说一个用于分割任务的图像数据集的结构如图1所示,一个样本由原图像和对应的m

    2024年01月25日
    浏览(11)
  • LLMs之FineTuning:LLaMA-Factory框架中如何在 dataset_info.json 中自定义alpaca 格式/sharegpt 格式数据集及其示例演示

    LLMs之FineTuning:LLaMA-Factory框架中如何在 dataset_info.json 中通过指定  --dataset dataset_name  参数→实现自定义alpaca 格式/sharegpt 格式数据集及各部分字段的对应关系→以便正确读取和利用数据集内容训练模型 目录

    2024年04月23日
    浏览(21)
  • 猿创征文|【Python数据科学快速入门系列 | 05】常用科学计算函数

    猿创征文|【Python数据科学快速入门系列 | 05】常用科学计算函数

    这是机器未来的第44篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/126615267 本文以鸢尾花的数据预处理为例,描述了科学计算在机器学习使用的示例。 以鸢尾花数据集为例。 鸢尾花数据集有4个特征,1个标签,特征为sepal_length,sepal_width,petal_length,petal_width,分别

    2023年04月09日
    浏览(8)
  • 数据结构05:树的定义与双亲、孩子表示法[更新中]

    数据结构05:树的定义与双亲、孩子表示法[更新中]

    图源:BING AI  考研笔记整理约2.2w字,小白友好、代码可跑的笔记整理,请小伙伴放心食用~👻👻 第1版:查资料、写BUG、画导图、画配图ing~ 参考用书: 王道考研《2024年 数据结构考研复习指导》 参考用书配套视频: 5.1.1 树的定义和基本术语_哔哩哔哩_bilibili 特别感谢:  

    2024年02月08日
    浏览(12)
  • 【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05

    【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05

    目录 一、自定义组件 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.2.1 局部引用组件 1.2.2 全局引用组件 1.2.3 全局引用 VS 局部引用 1.2.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 组件样式隔离的注意点 2.3 修改组件的样式隔离选项 2.4 styleIsolation 的可选值 3. 数据

    2024年02月07日
    浏览(30)
  • 视频理解学习笔记(二):I3D and Kinetics Dataset

    视频理解学习笔记(二):I3D and Kinetics Dataset

    LSTM (a): ConvNet + LSTM 3D网络 (b): 3D-ConvNet 双流网络,利用光流 (c): Two-Stream 其他 : 将3D和双流结合 (d): 3D-Fused I3D (e): Two-Sream I3D Workshop : CVPR’17 论文标题 :Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset 论文地址:https://arxiv.org/abs/1705.07750 论文作者 : Joao Carreira from DeepMind

    2024年02月06日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包