跳转到主要内容
工程的博客

统计功能在Apache 1.1火花

分享这篇文章

我们的一个哲学在Apache火花是提供丰富的和友好的内置库,这样用户可以很容易地组装数据管道。火花,特别是MLlib,快速获得牵引之间数据科学家和机器学习实践者,我们观察一个不断增长的需求以外的数据分析支持模型拟合。应对这种需求,我们已经开始添加的可伸缩实现常见的统计功能,方便各种组件的数据管道。

我们高兴地宣布Apache 1.1火花。附带数统计算法中常见的内置支持探索性数据管道:

  • 相关性:数据依赖分析
  • 假设检验:拟合优度;独立测试
  • 分层抽样:扩展训练集和分布控制标签
  • 随机数据生成:随机算法;性能测试

易用性是火花的主要任务之一,我们投入了大量的精力API设计的统计功能。借用广泛采用的灵感火花的统计数据api统计软件包,比如R和SciPy。统计,O ' reilly最近的一项调查中显示数据科学家之间最受欢迎的工具。

相关性

相关性提供定量的测量统计两个随机变量之间的依赖。实现相关规定mllib.stat.Statistics

MLlib
  • corr (x, y =没有方法=“皮尔森”|“枪兵”)
R
  • 软木(x, y =零,方法= c(“皮尔森”、“假象”,“枪兵”))
SciPy
  • pearsonr (x, y)
  • spearmanr (a, b =没有)

如表所示,R和SciPy。统计数据给我们两个非常不同的方向在MLlib相关性API。我们最终聚集在R的风格有一个功能,需要在相关方法名称的字符串参数考虑可扩展性以及简洁的API列表。的初始设定方法包含“培生”和“枪兵”,两个最常用的相关性。

假设检验

假设检验是数据驱动的应用程序所必需的。测试结果显示统计学意义的事件不太可能发生的机会。例如,我们可以测试两个样品之间是否存在显著相关性通过独立测试。在Apache 1.1火花,我们实现了卡方拟合优度和独立的测试:

MLlib
  • chiSqTest(观察:向量,预期:向量)
  • chiSqTest(观察:矩阵)
  • chiSqTest(数据:抽样[LabeledPoint])
R
  • chisq。测试(x, y = NULL,正确的= TRUE, p =代表(1 / (x)长度,长度(x)),重新调节。p = FALSE, simulate.p。值= FALSE)
SciPy
  • chisquare (f_obs f_exp = None, ddof = 0,轴= 0)

当设计卡方测试API,我们把最大的公分母参数R和SciPy API和编辑一些不常用的参数API的简单性。注意,与R和SciPy一样,输入数据类型确定拟合优度或独立进行测试。我们添加了一个特殊的例子支持输入类型抽样(LabeledPoint)通过卡方独立性测试使特征选择。

分层抽样

是很常见的一个庞大的人口由various-sized亚种群(地层),例如,一个训练集与许多比消极更积极的实例。等样品数量,有利于独立样本每个层减少总方差或代表小而重要的地层。这种抽样设计分层抽样。与其他统计功能,在MLlib驻留,我们把火花核心,分层抽样方法抽样被广泛的用于数据分析。我们提供两个版本的分层抽样,sampleByKeysampleByKeyExact。既适用于一个键值对抽样与关键指示地层,并且都把地图从用户指定每个阶层的抽样概率。R和SciPy为分层抽样提供内置支持。

MLlib
  • sampleByKey (withReplacement、分数、种子)
  • sampleByKeyExact (withReplacement、分数、种子)

类似于RDD.sample,sampleByKey贝努里抽样或泊松采样适用于每一项独立,很便宜,但并不能保证准确的样本大小为每个地层(地层的大小乘以相应的抽样概率)。sampleByKeyExact利用可伸缩的抽样算法,保证准确的每个阶层有高概率样本大小,但它需要多个经过数据。我们有一个单独的方法名来强调它是更昂贵的。

随机数据生成

随机数据生成用于测试现有的算法和实现随机算法,如随机投影。我们提供以下方法mllib.random.RandomRDDs生成包含i.i.d.抽样值从一个分布,例如,制服,标准正态或泊松。

MLlib
  • normalRDD (sc、大小[numPartitions、种子])
  • normalVectorRDD (sc numRows numCols, [numPartitions、种子])
R
  • rnorm (n = 0, sd = 1)
SciPy
  • randn (d0, d1,…dn)
  • 正常([loc、规模、大小)
  • standard_normal((大小))

随机数据生成API例证了一种情况我们添加了Spark-specific定制普遍支持的API。我们展示的并排比较MLlib正态分布的数据生成api与R和SciPy在上面的表中。我们提供1 d (抽样(双))和二维(抽样(向量))的支持,而只有1 d在NumPy R和任意维度中,都普遍以来MLlib功能。除了引发特定的参数,如SparkContext和分区的数量,我们也允许用户设置再现性的种子。除了内置的分布,用户可以插入自己的通过RandomDataGenerator

SparkR呢?

这时你可能会问为什么我们提供本机支持统计函数内部引发SparkR项目的存在。作为R包,SparkR是一个伟大的轻量级解决方案授权R api熟悉分布式计算的支持。我们计划完成这些内置的火花统计api是跨语言支持以及无缝集成与其他组件的火花,火花SQL和流媒体等产品开发一个统一的数据平台。bob体育客户端下载我们希望这些特性在未来从SparkR可调用的。

结束语

除了一组熟悉的api,统计功能火花还R和SciPy用户带来了巨大的好处,包括可扩展性、容错性和无缝集成现有的大数据管道。R和SciPy在一台机器上运行,而火花很容易扩大成百上千的机器和分配计算。我们比较MLlib运行时间的皮尔森的相关性与R 32-node集群,不包括移动数据所需的时间与R安装的节点。如下所示的结果演示了一个明显的优势的火花/ R对性能和可伸缩性。

Spark-vs-R-pearson

实验数据api,我们希望来自社区的反馈对这些设计的可用性。我们也欢迎来自社区的贡献提高统计功能火花。

免费试着砖
看到所有工程的博客的帖子