DataFrame操作方式
DataFrame/DataSet 操作
Databricks 不止一次提到过希望未来在编写 Spark 应用程序过程中,对于结构化/半结构化数据,使用 Datasets(DataFrame 的扩展) 来代替 RDD 操作,这主要源于 Datasets 以下几个方面:
- 充分利用了
Catalyst编译优化器 和Tungsten执行引擎优化程序 - 程序运行速度更快,以原始的二进制的方式进行某些操作
- 序列化/反序列化速度更快,使用 Tungsten 序列化方式,减少网络传输
- 缓存数据的内存消耗更少
- 统一接口等
Encoder编码器负责在表结构(Datasets)和JVM对象(RDD)之间转换。
操作1:
将 DataFrame/DataSet 映射到一张表中,然后使用 Sql 文档提供的函数进行操作 Spark-Sql-Functions 文档
Sql 中的方法参数分两种
String类型和Column类型的列名重载方法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操作方式的更多相关文章
- r语言与dataframe
什么是DataFrame 引用 r-tutor上的定义: DataFrame 是一个表格或者类似二维数组的结构,它的各行表示一个实例,各列表示一个变量. 没错,DataFrame就是类似于Excel表 ...
- spark是怎么从RDD升级到DataFrame的?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题的第五篇,我们来看看DataFrame. 用过Python做过机器学习的同学对Python当中pandas当中的Data ...
- Spark的DataFrame的窗口函数使用
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 SparkSQL这块儿从1.4开始支持了很多的窗口分析函数,像row_number这些,平时写程 ...
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
一.reindex() 方法:重新索引 针对 Series 重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- pandas.DataFrame对行和列求和及添加新行和列
导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFra ...
- pandas.DataFrame排除特定行
使用Python进行数据分析时,经常要使用到的一个数据结构就是pandas的DataFrame 如果我们想要像Excel的筛选那样,只要其中的一行或某几行,可以使用isin()方法,将需要的行的值以列 ...
- Spark SQL 之 DataFrame
Spark SQL 之 DataFrame 转载请注明出处:http://www.cnblogs.com/BYRans/ 概述(Overview) Spark SQL是Spark的一个组件,用于结构化 ...
- spark dataframe 类型转换
读一张表,对其进行二值化特征转换.可以二值化要求输入类型必须double类型,类型怎么转换呢? 直接利用spark column 就可以进行转换: DataFrame dataset = hive.s ...
随机推荐
- jgs--多线程和synchronized
多线程 多线程是我们开发人员经常提到的一个名词.为什么会有多线程的概念呢?我们的电脑有可能会有多个cpu(或者CPU有多个内核)这就产生了多个线程.对于单个CPU来说,由于CPU运算很快,我们在电脑上 ...
- java面试集锦
HashMap和HashTable的区别 他们都是Map接口的实现类,实现了将唯一键值映射到特定的值上. HashMap没有分类或者排序,它允许一个null和多个null值. HashTable类似于 ...
- hello Kotlin!
听说谷爹要把Kotlin作为了Android开发的一级语言,吓得我赶紧写个“Hello Kotlin!”压压惊! Kotlin是由JetBrains 公司开发的语言,并且已经开源.而JetBrains ...
- 029 hibernate抓取策略
实例A引用实例B,B如果是代理的话(比如多对一关联中):如果遍历A的查询结果集(假设有10条记录),在遍历A的时候,访问B变量,将会导致n次查询语句的发出!这个时候,如果在B一端的class上配置ba ...
- java zip4j 内存文件和磁盘文件 压缩和加密
经常服务器需要对文件进行压缩,网络上流传较多的是从磁盘文件中来压缩成zip文件.但是常常服务器的文件存放在内存中,以byte[]形式存储在内存中.这个时候就不能使用网络上流传的常用方法了,这里就需要对 ...
- 项目管理之 使用 appledoc 生成开发文档
写项目时通常会遇到要求写开发文档的需求,但是就源代码来说,文档最好和源码在一起,这样更新起来更加方便和顺手.Objective-C 有一些文档管理工具,doxygen, headdoc 和 apple ...
- js—浅谈方法和思路的重要性(首篇求大佬支持)
js-浅谈方法和思路的重要性 学了这么久的js,我从老师的,同学的代码中发现,老师写的代码比我们的要清楚的很多,基本上没有太多累赘啊,能少的没有少啊等等..... 废话不多说,下面我们来看看这个我的一 ...
- 目前微信 微博 新浪 豆瓣等所有分享的js插件
原理 功能 集成微信.微博.开心.豆瓣.人人.qq微博.搜狐.qq空间等分享 即时分享: 默认加载插件,即启动全部分享 定制分享:通过参数配置.静态数据配置 由你决定何时分享,如何分享 扩展: 通过数 ...
- Open vSwitch中的datapath flow匹配过程
看OVS2.7的datapath表项匹配是一件很蛋疼的事情 数据结构看不懂 匹配算法经过了多次演进,已经有点复杂了,看代码完全看不懂,我能怎么办,我也很绝望啊! 2.1之前精确匹配时代,匹配过程是 ...
- \classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)
开发项目重启eclipse 发现了如下错误! 解决方法 选择出现错误的项目 点击clean 即可~