数据集中的reduce方法的一些有用用例是什么

时间:2019-02-09 14:59:25

标签: apache-spark

reduce中的Dataset方法的一些有用用例。

我有下表

DEST_COUNTRY_NAME   ORIGIN_COUNTRY_NAME count
United States       Romania             15
United States       Croatia             1
United States       Ireland             344
Egypt               United States       15  

表表示为数据集。

scala> dataDS
res187: org.apache.spark.sql.Dataset[FlightData] = [DEST_COUNTRY_NAME: string, ORIGIN_COUNTRY_NAME: string ... 1 more field]

我想不出任何有用的方案来使用reduce中的dataDS方法。我猜想reduce方法将选择两行(表示为FlightData)并在其中进行一些操作,该操作应在数学上是关联的和累加的,结果应为FightData

(func: (FlightData, FlightData) => FlightData)FlightData

也许上表不符合reduce的目的。那么哪种数据类型适合reduce

2 个答案:

答案 0 :(得分:1)

该问题的案例类FlightData中的数据集是静态类型的。因此,您可以使用scala命令化的功能方式,例如按键还原,分组。主要好处是Spark会自动序列化您的案例类。例如,您可以使用Scala mapreducefoldleft函数在数据集上应用聚合或转换。

val totalSum = dataDS.map(_.count).reduce(_+_)

答案 1 :(得分:0)

我想在要加或乘整列时可以使用reduce。例如,说我想对count列的所有值求和。

scala> (dataDS.select(col("count").as[Int])).reduce((acc,n)=>acc+n);