我在mysql中有5行记录,如
我把这行读入火花并把它们转化成
JavaPairRDD<Tuple3<String,String,String>, Map>(<sku,seller,stock>, Map<margin,xxx>).到现在为止似乎还不错。
但是,当我使用reduceByKey函数将边距与结构相加时,如下所示:
JavaPairRDD<Tuple3<String,String,String>, Map>(<sku,seller,stock>, Map<marginSummary, xxx>).最终结果得到2个元素。
JavaPairRDD<Tuple3<String,String,String>, Map>(<sku,seller,stock>, Map<margin,xxx>).
JavaPairRDD<Tuple3<String,String,String>, Map>(<sku,seller,stock>, Map<marginSummary, xxx>).似乎row2没有进入reduceByKey函数体。我在想为什么?
发布于 2018-01-12 03:24:36
这是预期的结果。只有在合并单个键的对象时才调用func。如果只有一个键,就没有理由称之为它。
不幸的是,看起来你有一个更大的问题,这可以从你的问题推断出来。您正在尝试更改reduceByKey中值的类型。一般来说,它甚至不应该编译,因为reduceByKey采用Function2<V,V,V> -输入和输出类型必须是相同的。
如果要更改类型,则应使用任意一种combineByKey
public <C> JavaPairRDD<K,C> combineByKey(Function<V,C> createCombiner,
Function2<C,V,C> mergeValue,
Function2<C,C,C> mergeCombiners)或aggregateByKey
public <U> JavaPairRDD<K,U> aggregateByKey(U zeroValue,
Function2<U,V,U> seqFunc,
Function2<U,U,U> combFunc)https://stackoverflow.com/questions/48219029
复制相似问题