当前位置: 首页 > 面试题库 >

解释Spark中的聚合功能

丌官高远
2023-03-14
问题内容

我正在寻找有关通过python中的spark可用的聚合功能的更好解释。

我的示例如下(使用来自Spark 1.2.0版本的pyspark)

sc.parallelize([1,2,3,4]).aggregate(
  (0, 0),
  (lambda acc, value: (acc[0] + value, acc[1] + 1)),
  (lambda acc1, acc2: (acc1[0] + acc2[0], acc1[1] + acc2[1])))

输出:

(10, 4)

我得到的预期结果(10,4)1+2+3+4和4个元素的总和。如果我将传递给聚合函数的初始值更改为(1,0)from,(0,0)
则会得到以下结果

sc.parallelize([1,2,3,4]).aggregate(
    (1, 0),
    (lambda acc, value: (acc[0] + value, acc[1] + 1)),
    (lambda acc1, acc2: (acc1[0] + acc2[0], acc1[1] + acc2[1])))

输出:

(19, 4)

该值增加9。如果将其更改为(2,0),则该值为(28,4),依此类推。

有人可以向我解释该值是如何计算的吗?我希望该值增加1而不是9,希望看到(11,4)相反的值(19,4)


问题答案:

我没有足够的声誉积分可以评论马斯格先前的回答。实际上,零值应该对seqop保持“中性”,这意味着它不会干扰seqop的结果,例如0代表加,或1代表*。

您永远不要尝试使用非中性值,因为它可能会被任意应用。此行为不仅与分区数有关。

我尝试了与问题所述相同的实验。对于1个分区,将零值应用3次。有2个分区,共6次。与3个分区,9倍,这将继续。



 类似资料:
  • MongoDB中的聚合框架有解释功能吗?我在文件里看不到。 我知道找到你就行了 但是在聚合框架中,我得到了一个错误

  • 我需要聚合一个基于1分钟时间间隔的数据集。当我尝试此操作时,它会抛出错误: 我的数据集如下所示 org.apache.spark.sql.AnalysisException:无法解析(datetime,value)中的列名“60秒”;在org.apache.spark.sql.dataset$$anonfun$resolve$1.apply(dataset.scala:216)在org.apach

  • 问题内容: 我试图在pySpark的一行代码中进行多项操作,但不确定我的情况是否可行。 我的意图是不必将输出另存为新的数据框。 我当前的代码非常简单: 我的意图是在使用后添加,以得到与每个 列值匹配的记录计数,这些记录打印\显示为输出。 尝试使用时,出现异常。 有什么方法可以同时实现和 .show()打印,而无需将代码拆分为两行命令,例如: 或更好的办法是将合并的输出输出到-额外的一栏,用于说明与

  • 我正在考虑将dataset1分解为每个“T”类型的多个记录,然后与DataSet2连接。但是你能给我一个更好的方法,如果数据集变大了,它不会影响性能吗?

  • 本文向大家介绍MongoDB聚合功能浅析,包括了MongoDB聚合功能浅析的使用技巧和注意事项,需要的朋友参考一下 MongoDB数据库功能强大!除了基本的查询功能之外,还提供了强大的聚合功能。这里简单介绍一下count、distinct和group。 1.count:           2.distinct:     distinct用来找出给定键的所有不同的值。使用时也必须指定集合和键。  

  • 问题内容: 我有这样的表… 我想要这个… 使用PIVOT可以做到吗? 问题答案: 您可以使用MAX聚合,它将仍然有效。一个值的最大值=该值。 在这种情况下,您还可以在customerid上自我连接5次,并按每个表引用按dbColumnName进行过滤。它可能会更好。