spark Dataframe 中的 reducebykey 和 aggregatebykey
reducebykey and aggregatebykey in spark Dataframe
我正在使用 spark 2.0 从镶木地板文件中读取数据。
val Df = sqlContext.read.parquet("c:/data/parquet1")
val dfSelect= Df.
select(
"id",
"Currency",
"balance"
)
val dfSumForeachId=dfSelect.groupBy("id").sum("balance")
val total=dfSumForeachId.agg(sum("sum(balance)")).first().getDouble(0)
为了获得总余额值,这是在数据帧上使用 action first() 获取总余额的最佳方式吗?
在 spark 2.0 中使用 groupby key 是否可以,它是否具有与 rdd 上的 groupbykey 相同的性能问题,是否需要通过网络随机播放整个数据然后执行聚合,或者聚合在本地执行,如早期版本的 spark 中的 reducebykey
谢谢
使用first获取数据是一种非常有效的获取数据的方式。也就是说,做:
val total = dfSelect.agg(sum("balance")).first().getDouble(0)
可能会让您获得更好的总数。
group by key 和 reduce by key 的工作原理与以前的版本完全相同,原因相同。 group by key 不假设您要执行的操作,因此不知道如何像 reduce by key 那样进行部分聚合。
当您执行数据帧分组和求和时,您实际上是在使用 + 选项进行键归约,而您所做的第二个聚合是使用 + 进行归约。也就是说,DataFrame 的效率更高,因为确切地知道它做了什么可以执行许多优化,例如整个阶段的代码生成。
我正在使用 spark 2.0 从镶木地板文件中读取数据。
val Df = sqlContext.read.parquet("c:/data/parquet1")
val dfSelect= Df.
select(
"id",
"Currency",
"balance"
)
val dfSumForeachId=dfSelect.groupBy("id").sum("balance")
val total=dfSumForeachId.agg(sum("sum(balance)")).first().getDouble(0)
为了获得总余额值,这是在数据帧上使用 action first() 获取总余额的最佳方式吗?
在 spark 2.0 中使用 groupby key 是否可以,它是否具有与 rdd 上的 groupbykey 相同的性能问题,是否需要通过网络随机播放整个数据然后执行聚合,或者聚合在本地执行,如早期版本的 spark 中的 reducebykey
谢谢
使用first获取数据是一种非常有效的获取数据的方式。也就是说,做:
val total = dfSelect.agg(sum("balance")).first().getDouble(0)
可能会让您获得更好的总数。
group by key 和 reduce by key 的工作原理与以前的版本完全相同,原因相同。 group by key 不假设您要执行的操作,因此不知道如何像 reduce by key 那样进行部分聚合。
当您执行数据帧分组和求和时,您实际上是在使用 + 选项进行键归约,而您所做的第二个聚合是使用 + 进行归约。也就是说,DataFrame 的效率更高,因为确切地知道它做了什么可以执行许多优化,例如整个阶段的代码生成。