Spark DataFrame的groupBy vs groupByKey】的更多相关文章

在使用Spark SQL的过程中,经常会用到groupBy这个函数进行一些统计工作.但是会发现除了groupBy外,还有一个groupByKey(注意RDD也有一个groupByKey,而这里的groupByKey是DataFrame的).这个groupByKey引起了我的好奇,那我们就到源码里面一探究竟吧. 所用spark版本:spark2.1.0 先从使用的角度来说, groupBy:groupBy类似于传统SQL语言中的group by子语句,但比较不同的是groupBy()可以带多个列名…
https://blog.csdn.net/sparkexpert/article/details/51042970 spark dataframe派生于RDD类,但是提供了非常强大的数据操作功能.当然主要对类SQL的支持. 在实际工作中会遇到这样的情况,主要是会进行两个数据集的筛选.合并,重新入库. 首先加载数据集,然后在提取数据集的前几行过程中,才找到limit的函数. 而合并就用到union函数,重新入库,就是registerTemple注册成表,再进行写入到HIVE中. 不得不赞叹dat…
spark dataframe派生于RDD类,但是提供了非常强大的数据操作功能.当然主要对类SQL的支持. 在实际工作中会遇到这样的情况,主要是会进行两个数据集的筛选.合并,重新入库. 首先加载数据集,然后在提取数据集的前几行过程中,才找到limit的函数. 而合并就用到union函数,重新入库,就是registerTemple注册成表,再进行写入到HIVE中. 不得不赞叹dataframe的强大. 具体示例:为了得到样本均衡的训练集,需要对两个数据集中各取相同的训练样本数目来组成,因此用到了这…
今天本来想写一个spark dataframe unionall的demo,由于粗心报下面错误: Exception in thread "main" org.apache.spark.sql.AnalysisException: Union can only be performed on tables with the same number of columns, but the left table has 3 columns and the right has 4; at o…
原文链接:在Spark中尽量少使用GroupByKey函数 为什么建议尽量在Spark中少用GroupByKey,让我们看一下使用两种不同的方式去计算单词的个数,第一种方式使用reduceByKey :另外一种方式使用groupByKey,代码如下: 01 # User: 过往记忆 02 # Date: 2015-05-18 03 # Time: 下午22:26 04 # bolg: http://www.iteblog.com 05 # 本文地址:http://www.iteblog.com/…
pandas.DataFrame的groupby()方法是一个特别常用和有用的方法.让我们快速掌握groupby()方法的基础使用,从此数据分析又多一法宝. 首先导入package: import pandas as pd import numpy as np groupby的最基本操作 df = pd.DataFrame({'A':[1,2,3,1],'B':[2,3,3,6],'C':[3,1,5,7]}) df 按照A列来进行分组(其实说白了就是将A列中重复的值和成同一个值,然后把A当成索…
spark sql 中join的类型 Spark DataFrame中join与SQL很像,都有inner join, left join, right join, full join; 类型 说明 inner join 内连接 left join 左连接 right join 右连接 full join 全连接 spark join 看其原型 def join(right : DataFrame, usingColumns : Seq[String], joinType : String) :…
原博文出自于: https://segmentfault.com/a/1190000002614456 感谢! 三月中旬,Spark发布了最新的1.3.0版本,其中最重要的变化,便是DataFrame这个API的推出.DataFrame让Spark具备了处理大规模结构化数据的能力,在比原有的RDD转化方式易用的前提下,计算性能更还快了两倍.这一个小小的API,隐含着Spark希望大一统「大数据江湖」的野心和决心.DataFrame像是一条联结所有主流数据源并自动转化为可并行处理格式的水渠,通过它…
一. 从Spark2.0以上版本开始,Spark使用全新的SparkSession接口替代Spark1.6中的SQLContext及HiveContext接口来实现其对数据加载.转换.处理等功能.SparkSession实现了SQLContext及HiveContext所有功能. SparkSession支持从不同的数据源加载数据,并把数据转换成DataFrame,并且支持把DataFrame转换成SQLContext自身中的表,然后使用SQL语句来操作数据.SparkSession亦提供了Hi…
读一张表,对其进行二值化特征转换.可以二值化要求输入类型必须double类型,类型怎么转换呢? 直接利用spark column 就可以进行转换: DataFrame dataset = hive.sql("select age,sex,race from hive_race_sex_bucktizer "); /** * 类型转换 */ dataset = dataset.select(dataset.col("age").cast(DoubleType).as(…
Spark是目前最流行的分布式计算框架,而HBase则是在HDFS之上的列式分布式存储引擎,基于Spark做离线或者实时计算,数据结果保存在HBase中是目前很流行的做法.例如用户画像.单品画像.推荐系统等都可以用HBase作为存储媒介,供客户端使用. 因此Spark如何向HBase中写数据就成为很重要的一个环节了.本文将会介绍三种写入的方式,其中一种还在期待中,暂且官网即可... 代码在spark 2.2.0版本亲测 1. 基于HBase API批量写入 第一种是最简单的使用方式了,就是基于R…
一.读写Parquet(DataFrame) Spark SQL可以支持Parquet.JSON.Hive等数据源,并且可以通过JDBC连接外部数据源.前面的介绍中,我们已经涉及到了JSON.文本格式的加载,这里不再赘述.这里介绍Parquet,下一节会介绍JDBC数据库连接. Parquet是一种流行的列式存储格式,可以高效地存储具有嵌套字段的记录.Parquet是语言无关的,而且不与任何一种数据处理框架绑定在一起,适配多种语言和组件,能够与Parquet配合的组件有: * 查询引擎: Hiv…
DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅比原有的RDD转化方式更加简单易用,而且获得了更高的计算性能.Spark能够轻松实现从MySQL到DataFrame的转化,并且支持SQL查询. 从上面的图中可以看出DataFrame和RDD的区别.RDD是分布式的 Java对象的集合,比如,RDD[Person]是以Person为类型参数,但是,Person类的内部结构对于RDD而言却是不可知的.DataFrame是一种以RDD为基础的分布式数据集,也就是分布式的Ro…
将DataFrame写成文件方法有很多最简单的将DataFrame转换成RDD,通过saveASTextFile进行保存但是这个方法存在一些局限性:1.将DataFrame转换成RDD或导致数据结构的改变2.RDD的saveASTextFile如果文件存在则无法写入,也就意味着数据只能覆盖无法追加,对于有数据追加需求的人很不友好3.如果数据需要二次处理,RDD指定分隔符比较繁琐 基于以上原因,在研读了Spark的官方文档后,决定采取DataFrame的自带方法 write 来实现.此处采用mys…
Spark中有两个类似的api,分别是reduceByKey和groupByKey.这两个的功能类似,但底层实现却有些不同,那么为什么要这样设计呢?我们来从源码的角度分析一下. 先看两者的调用顺序(都是使用默认的Partitioner,即defaultPartitioner) 所用spark版本:spark2.1.0 先看reduceByKey Step1 def reduceByKey(func: (V, V) => V): RDD[(K, V)] = self.withScope { red…
版本说明:Spark-2.3.0 使用Spark SQL在对数据进行处理的过程中,可能会遇到对一列数据拆分为多列,或者把多列数据合并为一列.这里记录一下目前想到的对DataFrame列数据进行合并和拆分的几种方法. 1 DataFrame列数据的合并例如:我们有如下数据,想要将三列数据合并为一列,并以“,”分割 +----+---+-----------+ |name|age| phone| +----+---+-----------+ |Ming| || |hong| || | zhi| ||…
说明:withColumn用于在原有DF新增一列 1. 初始化sqlContext val sqlContext = new org.apache.spark.sql.SQLContext(sc) 2.导入sqlContext隐式转换 import sqlContext.implicits._ 3.  创建DataFrames val df = sqlContext.read.json("file:///usr/local/spark-2.3.0/examples/src/main/resour…
根据条件对数据集排序(sorting)也是一种重要的内置运算.要对行或列索引进行排序(按字典顺序), 可使用sort_index 方法, 它将返回一个已排序的新对象: 而DataFrame, 则可以根据任意一个轴上的索引进行排序: 降序 数据默认是按照升序排序的, 但也可以安装降序排序 按值排序 如果有缺失值呢 求唯一值排序和频率排序 Dataframe指定某列的值进行排序,by选项 那么如果多个呢? 排名 排名(ranking ) 跟排序关系密切, 且它会增设一个排名值(从1开始, 一直到数组…
1. 软件版本 软件 版本 Spark 1.6.0 Hive 1.2.1 2. 场景描述 在使用Spark时,有时需要存储DataFrame数据到Hive表中,一般的存储方式如下: // 注册临时表 myDf.registerTempTable("t1") // 使用SQLContext从临时表创建Hive表 sqlContext.sql("create table h1 as select * from t1") 在DataFrame中存储一般的数据类型,比如Do…
1.今天,我们来介绍spark以及dataframe的相关的知识点,但是在此之前先说一下对以前的hadoop的一些理解 当我启动hadoop的时候,上面有hdfs的存储结构,由于这个是分布式存储,所以当一个节点挂了之后,此后由于 还有别的机器上存储这些block块(这里面你肯定要问了,我们怎么知道它挂了,其实我前面关于akaka的时候rpc 通信的机制,心跳机制),所以这个是我们选择它的理由之一,还有一个原因我们可以进行无限扩容,是因为当我们 使用zookeeper进行管理这些datanode的…
DataFrame 的函数 Action 操作 1. collect() ,返回值是一个数组,返回dataframe集合所有的行 2. collectAsList() 返回值是一个Java类型的数组,返回dataframe集合所有的行 3. count() 返回一个number类型的,返回dataframe集合的行数 4. describe(cols: String*) 返回一个通过数学计算的类表值(count, mean, stddev, min, and max),这个可以传多个参数,中间用…
distinct/groupByKey/reduceByKey: distinct: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.spark.sql.SparkSession object TransformationsDemo { def main(args: Array[String]): Unit = { val sparkSession = SparkSess…
Spark 编程读取hive,hbase, 文本等外部数据生成dataframe后,一般我们都会map遍历get数据的每个字段,此时如果原始数据为null时,如果不进行判断直接转化为string,就会报空指针异常 java.lang.NullPointerException 示例代码如下: val data = spark.sql(sql) val rdd = data.rdd.map(record => { val recordSize = record.size for(i <- 0 to…
刚接触pandas不久,在处理特征时,碰到一个恶心的问题:用groupby聚合后,之前的dataframe对象变成了series对象,聚合的字段变成了索引index,导致获取这些字段时很麻烦,后面发现reset_index()这个函数,兼职完美的解决了我的需求. 元素数据如下: 聚合后变成了这样: 尝试这样访问按照column的方式获取值,结果报错了,后面发现已经变成了Series对象了,不是DataFrame了 可是我还想把sku_id 和type这2个字段作为column呀...诶 233.…
区别 :http://www.voidcn.com/article/p-wsqbotem-boa.html 获取列名的列表: DataFrame.columns.values.tolist()…
由于我要叠加rdd某列的数据,如果加数中出现nan,结果也需要是nan,nan可以做到,但我要处理的数据源中的nan是以null的形式出现的,null不能叠加,而且我也不能删掉含null的行,于是我用了sparksql 的 ISNULL和CASE WHEN方法: Case When 方法: 如果obs_PRE_1h列有值则不变,没有则变为nan,注意这里的nan需要写成 float(‘NaN’) SELECT (CASE WHEN ISNULL(obs_PRE_1h)=true THEN flo…
代码实现 // rdd转化为df[kv格式]val df = sqlContext.createDataFrame(check_data_type, structType) .select("cons_no", "org_no").distinct // 去重 .rdd .map(row => (row.getAs[String]("cons_no"), row.getAs[String]("org_no"))) .co…
今天主要介绍一下如何将 Spark dataframe 的数据转成 json 数据.用到的是 scala 提供的 json 处理的 api. 用过 Spark SQL 应该知道,Spark dataframe 本身有提供一个 api 可以供我们将数据转成一个 JsonArray,我们可以在 spark-shell 里头举个栗子来看一下. import org.apache.spark.sql.SparkSession val spark = SparkSession.builder().mast…
一. Hbase的region 我们先简单介绍下Hbase的架构和Hbase的region: 从物理集群的角度看,Hbase集群中,由一个Hmaster管理多个HRegionServer,其中每个HRegionServer都对应一台物理机器,一台HRegionServer服务器上又可以有多个Hregion(以下简称region).要读取一个数据的时候,首先要先找到存放这个数据的region.而Spark在读取Hbase的时候,读取的Rdd会根据Hbase的region数量划分stage.所以当r…
http://www.aboutyun.com/forum.php?mod=viewthread&tid=12358&page=1 1.DataFrame是什么?2.如何创建DataFrame?3.如何将普通RDD转变为DataFrame?4.如何使用DataFrame?5.在1.3.0中,提供了哪些完整的数据写入支持API? 自2013年3月面世以来,Spark SQL已经成为除Spark Core以外最大的Spark组件.除了接过Shark的接力棒,继续为Spark用户提供高性能的SQ…