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
?
答案 0 :(得分:1)
该问题的案例类FlightData
中的数据集是静态类型的。因此,您可以使用scala命令化的功能方式,例如按键还原,分组。主要好处是Spark会自动序列化您的案例类。例如,您可以使用Scala map
,reduce
和foldleft
函数在数据集上应用聚合或转换。
val totalSum = dataDS.map(_.count).reduce(_+_)
答案 1 :(得分:0)
我想在要加或乘整列时可以使用reduce
。例如,说我想对count列的所有值求和。
scala> (dataDS.select(col("count").as[Int])).reduce((acc,n)=>acc+n);