freqItems
sampleBy
cov
crosstab
approxQuantitle
boolmFilter 布隆选择器
corr 皮尔逊相关系数
countMinSketch

Spark2为DataSet/DataFrame提供了一个stat方法,会返回一个DataFrameStatFunctins对象,可以调用其方法来实现数据的探索功能。

df.stat.freqIterms(Seq("age"))

1 freqItems

包含了4个重载方法:

freqItems(cols:Seq[string]):DataFrame
freqItems(cols:Seq[string],support:Double):DataFrame
freqItems(cols:Array[String]):DataFrame
freqItems(cols:Array[String],support:Double):DataFrame

查看字段中的频繁元素集合,返回每个字段保安一个数组,包含了所有去重后的元素。support表示最小的频繁项阀值,默认为1%,如果元素的频繁数小于1%那么就会被忽略

val rows = Seq.tabulate() { i =>
if (i % == ) (, -1.0) else (i, i * -1.0)
}
val df = spark.createDataFrame(rows).toDF("a", "b")
// find the items with a frequency greater than 0.4 (observed 40% of the time) for columns
// "a" and "b"
val freqSingles = df.stat.freqItems(Array("a", "b"), 0.4)
freqSingles.show()
+-----------+-------------+
|a_freqItems| b_freqItems|
+-----------+-------------+
| [, ]|[-1.0, -99.0]|
+-----------+-------------+
// find the pair of items with a frequency greater than 0.1 in columns "a" and "b"
val pairDf = df.select(struct("a", "b").as("a-b"))
val freqPairs = pairDf.stat.freqItems(Array("a-b"), 0.1)
freqPairs.select(explode($"a-b_freqItems").as("freq_ab")).show()
+----------+
| freq_ab|
+----------+
| [,-1.0]|
| ... |
+----------+

2 sampleBy

包含了两个重载方法:

sampleBy[T](col:String,fractions:Map[T,Double],seed:Long):DataFrame
sampleBy[T](col:String,fractions:Map[T,Double],seed:Long):DataFrame

根据某个字段进行分层抽样,根据给定的分层百分比返回不经过替换的分层样本。fractions如果不指定,会使用0.

val df = spark.createDataFrame(Seq((, ), (, ), (, ), (, ), (, ), (, ),
(, ))).toDF("key", "value")
val fractions = Map( -> 1.0, -> 0.5)
df.stat.sampleBy("key", fractions, 36L).show()
+---+-----+
|key|value|
+---+-----+
| | |
| | |
| | |
+---+-----+

3 cov

cov(col1:String,col2:String):String    

计算两个字段之间的协方差。

val df = sc.parallelize( until ).toDF("id").withColumn("rand1", rand(seed=))
.withColumn("rand2", rand(seed=))
df.stat.cov("rand1", "rand2")
res1: Double = 0.065...

4 crosstab

crosstab(col1:Stirng,col2:String):DataFrame

交叉列表为一组变量提供了频率分布表,在统计学中被经常用到。例如在对租车行业的数据进行分析时,需要分析每个客户(name)租用不同品牌车辆(brand)的次数。此时,就可以直接调用crosstab函数。如果同时按几个变量或特征,把数据分类列表时,这样的统计表叫作交叉分类汇总表,其主要用来检验两个变量之间是否存在关系,或者说是否独立。

计算给定列的分组频数表,也称为相关表。每一列的去重值的个数应该小于1e4.最多返回1e6个非零对.每一行的第一列会是col1的去重值,列名称是col2的去重值。第一列的名称是$col1_$col2. 没有出现的配对将以零作为计数。DataFrame.crosstab() and DataFrameStatFunctions.crosstab()类似。
参数:●  col1 – 第一列的名称. 去重项作为每行的第一项。
      ●  col2 – 第二列的名称. 去重项作为DataFrame的列名称。

val df = spark.createDataFrame(Seq((, ), (, ), (, ), (, ), (, ), (, ), (, )))
.toDF("key", "value")
val ct = df.stat.crosstab("key", "value")
ct.show()
+---------+---+---+---+
|key_value| | | |
+---------+---+---+---+
| | | | |
| | | | |
| | | | |
+---------+---+---+---+

5 approxQuantitle

approxQuantile(cols:Array[String],probabilities:Array[Double],relativeError:Double):Array[Array[Double]]
approxQuantile(col:String,probailities:Array[Double],relativeError:Double):Array[Double]

计算近似分位数,其中null和NaN将会在计算之前被忽略掉,如果该列为空,或者只包含null、NaN,那么将会返回一个空Array,也就是Nil

  • cols:需要计算分位数的Columns。
  • probabilities:分位数的位置,要求[0,1]之间,0是最小值,0.5是中位数,1是最大值。
  • relativeError:相对误差,数字越小,结果越准确,但是计算代价也越大。

6 boolmFilter 布隆选择器

比较经典的判断元素是否存在的方法,牺牲精确度换空间的方法。4个重载方法:

bloomFilter(col:Column,expecteNumItems:Long,numBits:Long):BloomFilter
bloomFilter(colName:String,expectedNumIterms:Long,numBits:Long):BloomFilter
bloomFilter(col:Column,expectedNumItems:Long,fpp:Double):BloomFilter
bloomFilter(colName:String,expectedNumItems:Long,fpp:Double):BoolmFilter

colName/col:需要进行构建布隆选择器的列

expectedNumItems:预计将要被放入布隆选择器中的元素数量;

numBits:布隆选择器的预期位数,也就是Bits的长度

fpp:过滤器的错误概率,假阳性概率,该值越大,那么被错误判断不存在的值被判断为存在的概率越大

资料1:http://lxw1234.com/archives/2015/12/580.htm

资料2:https://www.jianshu.com/p/b0c0edf7686e

7 corr 皮尔逊相关系数

两个重载方法:

corr(col1:String,col2:String):Double
corr(col1:String,col2:String,method:String):Double
val df = sc.parallelize( until ).toDF("id").withColumn("rand1", rand(seed=))
.withColumn("rand2", rand(seed=))
df.stat.corr("rand1", "rand2", "pearson")
res1: Double = 0.613...

8 countMinSketch

用于统计大数据情况中的非精确数据频次。使用哈希原理,牺牲精确度换空间与实践,结果估算偏大,但是不会偏小,只需要固定大小的内存和计算实践,和需要统计的元素多少没有关系,对于低频次的元素,估算的相对误差可能比较大。

countMinSketch(col:Column,eps:Double,confidence:Double,seed:Int):CountMinSketch
countMinSketch(col:Column,depth:Int,width:Int,seed:Int):CountMinSketch
countMinSketch(colName:String,eps:Double,confidence:Double,seed:Int):CountMinSketch
countMinSketch(colName:String,depth:Int,width:Int,seed:Int):CountMinSketch

col:需要计算sketch的列

depth:sketch的深度

width:sketch的宽度

seed:随机种子

eps:相对误差

confidence:置信度?不确定

Spark2-数据探索的更多相关文章

  1. postgresql-分页重复数据探索

    # postgresql-分页重复数据探索 ## 问题背景 许多开发和测试人员都可能遇到过列表的数据翻下一页的时候显示了上一页的数据,也就是翻页会有重复的数据. ### 如何处理? 这个问题出现的原因 ...

  2. python数据探索

    数据质量分析 脏数据包括:缺失值:异常值:不一致的值:重复数据及含有特殊符号的数据: 1.缺失值处理 统计缺失率,缺失数 2.异常值处理 (1)简单统计量分析 (2)3Q原则 正态分布情况下,小概率事 ...

  3. 数据挖掘(二)用python实现数据探索:汇总统计和可视化

    今天我们来讲一讲有关数据探索的问题.其实这个概念还蛮容易理解的,就是我们刚拿到数据之后对数据进行的一个探索的过程,旨在了解数据的属性与分布,发现数据一些明显的规律,这样的话一方面有助于我们进行数据预处 ...

  4. Kaggle:Home Credit Default Risk 数据探索及可视化(1)

    最近博主在做个 kaggle 竞赛,有个 Kernel 的数据探索分析非常值得借鉴,博主也学习了一波操作,搬运过来借鉴,原链接如下: https://www.kaggle.com/willkoehrs ...

  5. 利用python进行泰坦尼克生存预测——数据探索分析

    最近一直断断续续的做这个泰坦尼克生存预测模型的练习,这个kaggle的竞赛题,网上有很多人都分享过,而且都很成熟,也有些写的非常详细,我主要是在牛人们的基础上,按照数据挖掘流程梳理思路,然后通过练习每 ...

  6. Python机器学习之数据探索可视化库yellowbrick

    # 背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plot ...

  7. Python机器学习之数据探索可视化库yellowbrick-tutorial

    背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plotly ...

  8. python数据挖掘之数据探索第一篇

    目录 数据质量分析   当我们得到数据后,接下来就是要考虑样本数据集的数据和质量是否满足建模的要求?是否出现不想要的数据?能不能直接看出一些规律或趋势?每个因素之间的关系是什么?   通过检验数据集的 ...

  9. python数据探索与数据与清洗概述

    数据探索的核心: 1.数据质量分析(跟数据清洗密切联系,缺失值.异常值等) 2.数据特征分析(分布.对比.周期性.相关性.常见统计量等) 数据清洗的步骤: 1.缺失值处理(通过describe与len ...

  10. python数据处理(七)之数据探索和分析

    1.探索数据 1.1 安装agate库 1.2 导入数据 1.3 探索表函数 a.排序 b.最值,均值 c.清除缺失值 d.过滤 e.百分比 1.4 连结多个数据集 a.捕捉异常 b.去重 c.缺失数 ...

随机推荐

  1. 有趣for循环

    String fileValue = "2;3;4;5;6;"; String[] arry = fileValue.split(";"); for (int ...

  2. Grafana+Prometheus实现Ceph监控和钉钉告警-转载(云栖社区)

    获取软件包 最新的软件包获取地址 https://prometheus.io/download/ Prometheus 1.下载Prometheus $ wget https://github.com ...

  3. OpenStack核心组件-neutron网络服务

    1. neutron 介绍 1.1 Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能 ...

  4. 个人第5次作业-Alpha2项目的测试

    这个作业属于哪个课程 系统分析与设计 这个作业要求在哪里 作业要求 团队名称 卓越Code 这个作业的目标 选取3个非自己所在团队进行项目测试,协助该团队进行项目改进 前言 魏家田 201731062 ...

  5. 【Audiophobia UVA - 10048 】【Floyd算法】

    题目大意:从a城市到b城市的路径中,尽可能让一路上的最大噪音最小. 题目思路:设d [ i ][ j ]表示 i 到 j 的最大噪音的最小值. 那么d [ i ][ j ] = min( d[ i ] ...

  6. python笔记40-环境迁移freeze生成requirements.txt

    前言 我们用python在本地电脑上开发完成一个python自动化项目用例,或者开发完成一个django项目. 需要部署到另外一台电脑或者服务器上的时候,需要导入python相关的依赖包,可以用fre ...

  7. windows查看端口被占用情况

    首先,使用cmd命令打开CMD命令窗口 使用下面的命令来查看某端口被占用的情况,以8035为例: netstat -ano|findstr " 结果如下图: 最后一列的6532为PID号,根 ...

  8. Pollard-Rho算法求大数质因子

    /* * 大整数分解到现在都是世界级的难题,但却是一个重要的研究方向,大整数在公共密钥的研究上有着重要的作用 * Pollard Rho算法的原理就是通过某种方法得到两个整数a和b.而待分解的大整数为 ...

  9. linux命令之------Cat命令

    Cat命令 作用:cat命令用于连接文件并打印,查看文件内容: -n或--number:由1开始对所有输出的行数编号: -b或--number-nonblank:和-n相似,只不过对于空白行不做编号: ...

  10. Linux查看当前操作系统版本信息

    .Linux查看当前操作系统版本信息 cat /proc/version Linux version -.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gc ...