Spark2-データ探索

1 freqItems
 2 sampleBy
 。3 CoVの
 4 クロスタブ
 。5 approxQuantitle
 。6 boolmFilterブルームセレクタ
 7 コアーピアソン相関係数
 。8 countMinSketch

Spark2 statにデータセット/データフレームのための方法を提供し、DataFrameStatFunctinsオブジェクトを返します、あなたは、機能的なデータを探索達成するために、そのメソッドを呼び出すことができます。

df.stat.freqIterms(配列(" 年齢"))

1 freqItems

    四のオーバーロードされた方法は:

freqItems(COLS:配列[ 文字列]):DATAFRAME 
freqItems(COLS:配列[ ストリング]、サポート:ダブル):DATAFRAME 
freqItems(COLS:配列[文字列]):DATAFRAME 
freqItems(COLS:配列[文字列]、サポート:ダブル) :データフレーム

  要素の視野頻繁に収集、セキュリティの各フィールドには、重複除外のすべての要素を含む配列を返します。支持頻出アイテムが最小閾値を表す頻繁要素の数は、それの1%未満では無視されている場合、デフォルトでは、1%

ヴァル行= Seq.tabulate(100){I =>
   もし(I%2 == 0)(1、 - 1.0(I、iは* - 1.0 
} 
ヴァルDF = spark.createDataFrame(行).toDF(" A "" B " // 列の0.4よりも大きい周波数を持つアイテムを検索(時間の40%に観察された)
 // "a"および"b" 
ヴァルfreqSingles = df.stat.freqItems(配列(" " " B ")、0。4 
freqSingles.show()
 + ----------- + ------------- + 
| a_freqItems | b_freqItems | 
+ ----------- + ------------- + 
| [ 199 ] | [ - 1.0、 - 99.0 ] | 
+ ----------- + ------------- + // 周波数とアイテムのペアを見つける列における0.1より大きい「a」および「b」 
のVal pairDfはDFを=。選択構造体" A "" B "として" AB " ))
ヴァルfreqPairs = pairDf.stat.freqItems(配列(" AB
")、0.1 
freqPairs。選択($爆発(" -b_freqItems ")。として" freq_ab " ))ショー()。
 + ---------- + 
| freq_ab | 
+ ---- ------ + 
| [ 1、 - 1.0 ] | 
| ... | 
+ ---------- +

2 sampleBy

    これは、2つのオーバーロードされたメソッドが含まれています。

sampleBy [T](COL:文字列、画分:マップ[T、ダブル]、種:ロング):DATAFRAME 
sampleBy [T](COL:文字列、画分:マップ[T、ダブル]、種:ロング):データフレーム

 フィールド層化抽出には、剥離の一定割合の交換層化サンプルなしで返されました。指定しない場合の分画には、0を使用します。

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

3 cov

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

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

val df = sc.parallelize(0 until 10).toDF("id").withColumn("rand1", rand(seed=10))
  .withColumn("rand2", rand(seed=27))
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((1, 1), (1, 2), (2, 1), (2, 1), (2, 3), (3, 2), (3, 3)))
  .toDF("key", "value")
val ct = df.stat.crosstab("key", "value")
ct.show()
+---------+---+---+---+
|key_value|  1|  2|  3|
+---------+---+---+---+
|        2|  2|  0|  1|
|        1|  1|  1|  0|
|        3|  0|  1|  1|
+---------+---+---+---+

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(0 until 10).toDF("id").withColumn("rand1", rand(seed=10))
  .withColumn("rand2", rand(seed=27))
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:置信度?不确定

おすすめ

転載: www.cnblogs.com/itboys/p/11111458.html