DataFrame/DataSet 操作

Databricks 不止一次提到过希望未来在编写 Spark 应用程序过程中,对于结构化/半结构化数据,使用 Datasets(DataFrame 的扩展) 来代替 RDD 操作,这主要源于 Datasets 以下几个方面:

  • 充分利用了 Catalyst 编译优化器 和 Tungsten 执行引擎优化程序
  • 程序运行速度更快,以原始的二进制的方式进行某些操作
  • 序列化/反序列化速度更快,使用 Tungsten 序列化方式,减少网络传输
  • 缓存数据的内存消耗更少
  • 统一接口等
    Encoder 编码器负责在表结构(Datasets)和 JVM 对象(RDD)之间转换。

操作1:

DataFrame/DataSet 映射到一张表中,然后使用 Sql 文档提供的函数进行操作 Spark-Sql-Functions 文档

Sql 中的方法参数分两种

  1. String 类型和 Column 类型的列名重载方法
  2. Column 类型的列名方法

如下所示:

  1. def min(e: Column): Column
  2. def min(columnName: String): Column
  3. def abs(e: Column): Column

对于 String 类型的列名,我们可以先将 DataFrame 映射到一种表中,然后直接写 Sql 语句进行查询操作

  1. import spark.implicits._
  2. val df = spark.readStream.text("hdfs://localhost:9000/names/yob1884.txt")
  3. df.createGlobalTempView("people")
  4. //value 为列名
  5. spark.sql("select * from global_temp.people").show()
  6. spark.sql("select approx_count_distinct(value,0.05) from global_temp.people" ).show()
  7. spark.sql("select min(value) from global_temp.people").show()

对于 Column 类型的列名,我们只能在 DataFrame 上调用 select 方法进行操作

  1. val spark = SparkSession
  2. .builder()
  3. .appName("Spark structured Steaming our output example")
  4. .getOrCreate()
  5. import spark.implicits._
  6. val df = spark.readStream
  7. .option("maxFilesPerTrigger", "1")
  8. .textFile("hdfs://localhost:9000/test")
  9. val query = df.map(_.toString().split(","))
  10. .map(p => Person(p(0), p(1), Integer.parseInt(p(2))))
  11. .select($"name", $"age")
  12. .where("age>50")
  13. import org.apache.spark.sql.functions._
  14. val testDF = query.select(min($"age"))

操作2:

DataFrame/DataSet 转换成 DataSet,使用 DataSet 提供的函数进行操作DataSet 操作文档

  1. //DataSet group By
  2. query.groupBy($"age").count()
  3. //sql group by
  4. spark.sql("select * from global_temp.people group by value")

DataFrame操作方式的更多相关文章

  1. r语言与dataframe

    什么是DataFrame 引用 r-tutor上的定义: DataFrame 是一个表格或者类似二维数组的结构,它的各行表示一个实例,各列表示一个变量. 没错,DataFrame就是类似于Excel表 ...

  2. spark是怎么从RDD升级到DataFrame的?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题的第五篇,我们来看看DataFrame. 用过Python做过机器学习的同学对Python当中pandas当中的Data ...

  3. Spark的DataFrame的窗口函数使用

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 SparkSQL这块儿从1.4开始支持了很多的窗口分析函数,像row_number这些,平时写程 ...

  4. 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

    一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...

  5. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  6. pandas.DataFrame对行和列求和及添加新行和列

    导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFra ...

  7. pandas.DataFrame排除特定行

    使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame 如果我们想要像Excel的筛选那样,只要其中的一行或某几行,可以使用isin()方法,将需要的行的值以列 ...

  8. Spark SQL 之 DataFrame

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

  9. spark dataframe 类型转换

    读一张表,对其进行二值化特征转换.可以二值化要求输入类型必须double类型,类型怎么转换呢? 直接利用spark column 就可以进行转换: DataFrame dataset = hive.s ...

随机推荐

  1. JavaScript中的DOM函数与关键字汇总

    DOM节点的属性 属性 描述 attributes数组 获取某个节点的所有属性子节点(实际是一个NodeList对象) childNodes数组    获取某个节点的所有子节点,可以按数组方式访问子节 ...

  2. poj2253 Frogger Dijkstra变形

    题目链接:http://poj.org/problem?id=2253 就是求所有路径的最大边权值的最小值 处理时每次找出距离当前的已选的节点的最短距离,然后更新每个未选节点的值 代码: #inclu ...

  3. 如何用Ettercap实现“中间人攻击”(附下载链接)

    什么是“中间人攻击”? 中间人攻击(Man-in-the-Middle Attack,简称“MiTM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在 ...

  4. 浅谈RSA加密

    RSA背景 在1976年以前,传统的加解密过程是: 1.A采用某种手段对数据进行加密. 2.数据传输到B的手中. 3.B逆向的实施A加密采用的步骤. 4.数据被还原. 这就是所谓的对称加密. 解密和加 ...

  5. C#中string,char[],byte[]互相转换

    string 转换成 Char[] string ss = "我爱你,中国"; char[] cc = ss.ToCharArray(); Char[] 转换成string str ...

  6. CMD和seaJS

    前面的话 CMD(Common Module Definition)表示通用模块定义,该规范是国内发展出来的,由阿里的玉伯提出.就像AMD有个requireJS,CMD有个浏览器的实现SeaJS,Se ...

  7. linux下安装一款笔记软件(为知笔记)

    今天突然想在ubuntu上安装一款跨平台(windows.linux.android)的笔记软件来做日常记录.文章记录以及网页收藏.原先并没有使用过类似的软件,只是见身边的很多人在使用印象笔记来做记录 ...

  8. 如何自学成为一个WEB前端

    WEB前端是做什么的? 那些什么高大上的介绍作者就略过了,简单来说就是做网页的,我们上网浏览的网站界面就是WEB前端工程师做的. 在互联网迅速发展的近几年,你上网冲浪的时候是不是感觉WEB网站越来越漂 ...

  9. ionic2 使用 cordova 打包成安卓apk

    准备工作: 1.下载java sdk 配置好java 环境 2.下载android sdk 跟 android studio 并配置好环境 1.查看平台支持,添加android平台 首先命令提示符进入 ...

  10. java集合(1)- 类底层数据结构分析

    Java 集合类图 参考:http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526822.html