云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

企业邮箱_小程序需要服务器吗_最新活动

小七 141 0

apachespark中具有数据帧的统计和数学函数

我们在apachespark1.3中引入了数据帧,使apachespark更易于使用。受到R和Python中数据帧的启发,Spark中的DataFrames公开了一个API,它类似于数据科学家已经熟悉的单节点数据工具。统计学是日常数据科学的重要组成部分。我们很高兴地宣布,在即将到来的1.4版本中,我们将改进对统计和数学函数的支持。在这篇博文中,我们将介绍一些重要功能,包括:随机数据生成摘要和描述性统计样本协方差与相关交叉表(又称列联表)经常项目数学函数我们在示例中使用Python。然而,Scala和Java用户也存在类似的api。1随机数据生成随机数据生成对于测试现有算法和实现随机算法(如随机投影)非常有用。我们提供以下方法sql.函数用于生成包含从分布中提取的i.i.d.值的列,例如均匀分布(rand)和标准正态分布(randn)。In[1]:来自pyspark.sql.functions进口兰德,兰登在[2]中:#创建一个包含一个int列和10行的数据帧。在[3]中:df=sqlContext.range(0,10)在[4]:测向显示()+--+|身份证|+--+|0||1||二||三||四||五||六||7||八||九|+--+在[4]中:#使用均匀分布和正态分布生成另外两个列。在[5]:数据框选择("id",rand(seed=10).alias("uniform"),randn(seed=27).alias("normal")).show()+--+-------------------+--------------------+|身份证|制服|正常|+--+-------------------+--------------------+|0 | 0.7224977951905031 |-0.1875348803463305||1 | 0.2953174992603351 |-0.26525647952450265||2 | 0.4536856090041318 |-0.7195024130068081||3 | 0.9970412477032209 | 0.5181478766595276||4 | 0.19657711634539565 | 0.7316273979766378||5 | 0.48533720635534006 | 0.07724879367590629||6 | 0.7369825278894753 |-0.5462256961278941||7 | 0.5241113627472694 |-0.2542275002421211||8 | 0.2977697066654349 |-0.5752237580095868||9 | 0.5060159582230856 | 1.0900096472044518|+--+-------------------+--------------------+2摘要和描述性统计导入数据后要执行的第一个操作是了解数据的外观。对于数字列,了解描述性摘要统计信息有助于了解数据的分布情况。函数descripe返回一个数据帧,其中包含诸如非空项的数量(count)、平均值、标准偏差以及每个数值列的最小值和最大值。In[1]:来自pyspark.sql.functions进口兰德,兰登在[2]中:生成两个随机列的方法稍有不同在[3]中:df=sqlContext.range(0,10).withColumn('uniform',rand(种子=10)).withColumn('normal',randn(种子=27))在[4]:df.描述()。显示()+-------+------------------+-------------------+--------------------+|摘要|身份证|制服|正常|+-------+------------------+-------------------+--------------------+|计数| 10 | 10 | 10||平均值| 4.5 | 0.5215336029384192 |-0.01309370117407197||标准偏差| 2.8722813232690143 | 0.229328162820653 | 0.5756058014772729||最小值| 0 | 0.19657711634539565 |-0.7195024130068081||最大值| 9 | 0.9970412477032209 | 1.0900096472044518|+-------+------------------+-------------------+--------------------+如果您有一个包含大量列的数据帧,还可以对列的子集运行descripe:在[4]:df.描述('uniform','normal').show()+-------+-------------------+--------------------+|总结|统一|正常|+-------+-------------------+--------------------+|计数| 10 | 10||平均值| 0.5215336029384192 |-0.01309370117407197||标准偏差0.229328162820653 0.5756058014772729||最小值| 0.19657711634539565 |-0.7195024130068081||最大值| 0.9970412477032209 | 1.0900096472044518|+-------+-------------------+--------------------+当然,虽然describe对于快速探索性数据分析非常有效,但您也可以使用DataFrame上的normal select控制描述性统计信息的列表及其应用的列:In[5]:来自pyspark.sql.functions输入平均值、最小值、最大值在[6]:数据框选择([平均值('uniform'),min('uniform'),max('uniform')])。show()+------------------+-------------------+------------------+|平均(均匀)|最小(均匀)|最大(均匀)|+------------------+-------------------+------------------+|0.5215336029384192 | 0.19657711634539565 | 0.9970412477032209|+------------------+-------------------+------------------+三。样本协方差与相关协方差是两个变量之间如何变化的度量。正数意味着有一种趋势,即随着一个变量的增加,另一个变量也会增加。负数意味着随着一个变量的增加,另一个变量有减少的趋势。数据帧两列的样本协方差可计算如下:In[1]:来自pyspark.sql.functions进口兰特在[2]中:df=sqlContext.range(0,10).withColumn('rand1',rand(种子=10)).withColumn('rand2',rand(种子=27))在[3]:数据框统计cov('rand1','rand2')出[3]:0.009908130446217347在[4]:数据框统计cov('id','id')出[4]:9.1666666666666从上面可以看到,两个随机生成的列的协方差接近于零,而id列本身的协方差非常高。协方差值9.17可能很难解释。相关性是协方差的标准化度量,更容易理解,因为它提供两个随机变量之间统计相关性的定量测量。在[5]:测向统计校正('rand1','rand2')出[5]:0.14938694513735398在[6]:测向统计校正('id','id')出[6]:1.0在上面的示例中,id与自身完美关联,而随机生成的两个列的相关性值很低。4交叉表(列联表)交叉表提供了一组变量的频率分布表。交叉表是统计学中的一个强大工具,用于观察变量的统计显著性(或独立性)。在Spark 1.4中,用户将能够交叉制表一个数据帧的两个列,以便获得在这些列中观察到的不同对的计数。下面是一个如何使用交叉表获取列联表的示例。在[1]中:#创建一个包含两列的数据帧(name,item)在[2]:names=Alice","Bob","Mike"]在[3]:items=牛奶、面包、黄油、苹果、橘子]在[4]中:df=sqlContext.createDataFrame([(名称[i%3],项目[i%5]),范围(100)],名称,"项目"])在[5]:#看看前10行。在[6]:测向显示(十)+-----+-------+|名称|项目|+-----+-------+|爱丽丝牛奶||鲍伯面包||迈克黄油||爱丽丝苹果||鲍勃|橘子||迈克牛奶||爱丽丝面包||牛油||迈克苹果||爱丽丝|橘子|+-----+-------+在[7]:数据框统计交叉表("名称","项目").show()+---------+----+-----+------+------+-------+|名称|牛奶|面包|苹果|黄油|橘子|+---------+----+-----+------+------+-------+|鲍勃6 | 7 | 7 | 6 | 7||迈克| 7 | 6 | 7 | 6 | 7 | 6||爱丽丝| 7 | 7 | 6 | 7 | 7 | 7|+---------+----+-----+------+------+-------+需要记住的一点是,我们运行交叉表的列的基数不能太大。也就是说,不同的"名称"和"项目"的数目不能太大。试想一下,如果"item"包含10亿个不同的条目:您将如何将该表放在屏幕上?!5经常项目找出每列中哪些项是经常出现的,这对于理解数据集非常有用。在spark1.4中,用户可以使用dataframe找到一组列的频繁项。我们实现了Karp等人提出的一种单程算法。这是一种快速的近似算法,它总是返回出现在用户指定的最小行比例中的所有频繁项。请注意,结果可能包含误报,即不经常出现的项目。在[1]:df=sqlContext.createDataFrame([(1,2,3)如果i%2==0,对于范围(100)内的i,则为0(i,2*i,i%4),a","b","c"])在[2]:测向显示(十)+-+--+-+|a | b | c|+-+--+-+|1 | 2 | 3||1 | 2 | 1||1 | 2 | 3||3 | 6 | 3||1 | 2 | 3||5 | 10 | 1||1 | 2 | 3||7 | 14 | 3||1 | 2 | 3||9 | 18 | 1|+-+--+-+在[3]:频率=数据框统计频率项(a","b","c"],0.4)给定上述数据帧,以下代码将查找每列显示40%时间的频繁项:在[4]:频繁收集()[0]Out[4]:行(a_freqItems=[11,1],b_freqItems=[2,22],c_freqItems=[1,3])如您所见,"11"和"1"是列"a"的常用值。还可以通过使用struct函数创建复合列来查找列组合的常用项:In[5]:来自pyspark.sql.functions导入结构在[6]:频率=df.WITH列('ab',结构('a','b'))。统计频率项(['ab',0.4)在[7]:频繁收集()[0]Out[7]:行(ab_freqItems=[行(a=11,b=22),行(a=1,b=2)])从上面的例子中,"a=11和b=22"以及"a=1和b=2"的组合经常出现在这个数据集中。注意,"a=11和b=22"是假阳性。6数学函数Spark 1.4还增加了一套数学函数。用户可以轻松地将这些应用到他们的列中。支持的数学函数列表来自这个文件(我们还将在1.4发布后发布预构建文档)。输入必须是接受单个参数的列函数,例如cos、sin、floor、ceil。对于以两个参数作为输入的函数,例如pow、hypot,可以提供两列或double和column的组合。In[1]:来自pyspark.sql.functions进口*在[2]中:df=sqlContext.range(0,10).withColumn('uniform',rand(种子=10)