apache-spark - 我可以重用参数实例来从 Spark 中的聚合函数返回值吗?

标签 apache-spark

我想知道在这种情况下 Spark 中是否允许重用对象:

myRDD.aggregateByKey(DisplaysClicksSum.newZero(), (sum, displayClick) -> {
      sum.displaysSum += 1;
      sum.clicksSum += displayClick.clicked() ? 1 : 0;
      return sum;
    }, (sum1, sum2) -> {
      sum1.displaysSum += sum2.displaysSum;
      sum1.clicksSum += sum2.clicksSum;
      return sum1;
});

或者我应该创建新对象以从这些函数返回它们?

最佳答案

是的,这是允许的,从某种意义上说,Spark 中没有任何问题或禁止它。只需确保初始值对象没有被其他对象重用或更改即可。

在使用 Hadoop 中的Writable 对象的 RDD 时,有时这可能会出现问题。有时为了性能,Hadoop 会重用其 InputFormat 中的对象,这意味着它可能会更改您下面这些可变对象的值,从而引起各种意外。但这里的情况并非如此。

关于apache-spark - 我可以重用参数实例来从 Spark 中的聚合函数返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26548330/

相关文章:

java - 尝试在 Spark DataFrame 上使用 map

apache-spark - 将两个数据框中的行与最近点连接起来

apache-spark - Mesos 上 Apache Spark 的自定义状态存储提供程序

java - 多节点 hadoop 集群中的 Apache Spark Sql 问题

hadoop - hbase 跳过区域服务器直接从 hfile 读取行

apache-spark - 检查 GraphX 图形对象

apache-spark - 未安装slf4j时启动预建spark-master时出错

scala - 如何将具有 Decimal 的 spark DataFrame 转换为具有相同精度的 BigDecimal 的 Dataset?

java - 在hdfs上从Amplab-shark到Cassandra运行查询

unit-testing - 如何在 Palantir Foundry 中测试转换?