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 类型的列名方法

如下所示:

def min(e: Column): Column
def min(columnName: String): Column
def abs(e: Column): Column

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

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

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

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

操作2:

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

    //DataSet group By
query.groupBy($"age").count()
//sql group by
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. NUMBER_GET_NEXT 获取编号 遇到关于按年度编号的问题

    最近给财务做了一个平台,在系统创建一些特殊类型的合同,需要生成合同编号:财务要求 合同类型+公司代码 +年+三位流水号, eg:CP6008-2017001 SNRO 子对象数据元素就是 公司代码 不 ...

  2. hdu4463 Outlets 最小生成树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4463 很裸的一道题目,稍微处理一下输入即可 代码: #include<iostream> ...

  3. ZED 相机 && ORB-SLAM2安装环境配置与ROS下的调试

    注:1. 对某些地方进行了更新(红色标注),以方便进行配置. 2. ZED ROS Wrapper官方github已经更新,根据描述新的Wrapper可能已经不适用与Ros Indigo了,如果大家想 ...

  4. WARN Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn)

    [2017-05-19 13:32:14,933] INFO Waiting for keeper state SyncConnected (org.I0Itec.zkclient.ZkClient) ...

  5. 关于EF中直接执行sql语句的参数化问题

    某天 , 在review项目中代码的时候, 发现有哥们直接通过 Database.ExecuteSqlCommand("select * from order_info where  com ...

  6. 修改es最大返回结果数

    curl -XPUT http://114.215.171.188:9200/logstash-serverlog/_settings -d '{"index":{"ma ...

  7. LINUX 硬盘分区及文件系统

    一,top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. 1. 第一行是任务队列信息 2. 第二.三行为进程和CPU的信息 3. 第 ...

  8. Mysql数据库二进制安装

    MySQL数据库有四种安装方法: 源码包编译安装 RPM包安装 二进制文件安装 官方yum源安装 这里我们主要介绍二进制包的安装方法 在MySQL官网下载二进制包并且上传到服务器上 解压二进制包 [r ...

  9. 几个页面loading样式

    随手练习了几个loading样式,以后看到有意思的loading样式也会补充上.样式的兼容性建议还是去w3c上看下属性的兼容性,至少我习惯这么多,当然,w3c中文网貌似很久很久没更新过了,可能更好的还 ...

  10. python-散列表

    散列表 简单地来说,通过某种函数关系将输入的数据映射为数字,使得数字与数据有着一一对应的关系. 其中,散列函数必须满足一定的要求: 它必须是一致的.例如,当你输入mag时得到4,那么每当输入mag时, ...