我有以下表示销售数据的RDD:
val rddSales:RDD[((String, String), SalesData)]
我正在尝试创建一个reduceByKey
,其中的键是一个由SalesData中的(saleType + saleDate)组成的字符串。
实际上,我想过滤出具有相同saleType + saleDate的SalesData,然后返回没有重复的RDD[((String, String), SalesData)]
。
我尝试了以下方法:首先将RDD映射到键为(saleType + saleDate)且值为SalesData的结构。然后调用reduceByKey选择具有特定键的记录的第一个匹配项。
这是正确的方法吗?以及如何映射回初始的RDD结构?在reduceByKey之后,我有RDD[((String), SalesData)]
rddSales.map(rddSales => (rddSales._2.saleType + rddSales._2.saleDate, rddSales._2)).reduceByKey((a, b) => a)
答案 0 :(得分:1)
据我了解,您有一个RDD[((String, String), SalesData)]
,并且希望得到相同的东西,并且不包含saleType和saleDate的重复项。如果是这样...
使用(String, String)
作为密钥,而不是将其转换为String
并返回,该怎么办?那么您可以使用rdd.reduceByKey((a, b) => a)
请注意,由于未保留行顺序,因此将给您不确定的答案
答案 1 :(得分:1)
尝试创建tempRdd [(rddSales._2.saleType + rddSales._2.soldDate,(((String,String),SalesData)))],然后在tempRdd上应用reduceByKey。 以后的tempRdd可以通过.map()操作进行优化。