0

我有以下代表销售数据的 RDD:

val rddSales:RDD[((String, String), SalesData)] 

我正在尝试将reduceByKey其中的键设为由 SalesData 中的 (saleType + saleDate) 组成的字符串。其实我想用相同的salesType + 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)
4

2 回答 2

1

尝试创建一个 tempRdd[( rddSales._2.saleType + rddSales._2.soldDate, ((String, String), SalesData))] 然后在 tempRdd 上应用 reduceByKey。后期 tempRdd 可以通过 .map() 操作进行优化。

于 2018-07-04T18:34:24.350 回答
1

据我了解,您有一个RDD[((String, String), SalesData)]并且想要相同的东西,而 saleType 和 saleDate 没有重复。如果是这样 ...

(String, String)其用作您的密钥而不是将其转换String回来怎么样?然后你可以用rdd.reduceByKey((a, b) => a)

请注意,由于未保留行顺序,这会给您一个不确定的答案

于 2018-07-04T17:21:31.293 回答