首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >星星之火reduceByKey函数似乎不能单键工作。

星星之火reduceByKey函数似乎不能单键工作。
EN

Stack Overflow用户
提问于 2018-01-12 03:11:10
回答 1查看 726关注 0票数 0

我在mysql中有5行记录,如

  1. 卖方:a股:英国保证金:10
  2. 卖方:B股:美国保证金:5
  3. 卖方:a股:英国保证金:10
  4. 卖方:a股:英国保证金:3
  5. 卖方:a股:英国保证金:7

我把这行读入火花并把它们转化成

代码语言:javascript
复制
JavaPairRDD<Tuple3<String,String,String>, Map>(<sku,seller,stock>, Map<margin,xxx>).

到现在为止似乎还不错。

但是,当我使用reduceByKey函数将边距与结构相加时,如下所示:

代码语言:javascript
复制
JavaPairRDD<Tuple3<String,String,String>, Map>(<sku,seller,stock>, Map<marginSummary, xxx>).

最终结果得到2个元素。

代码语言:javascript
复制
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函数体。我在想为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 03:24:36

这是预期的结果。只有在合并单个键的对象时才调用func。如果只有一个键,就没有理由称之为它。

不幸的是,看起来你有一个更大的问题,这可以从你的问题推断出来。您正在尝试更改reduceByKey中值的类型。一般来说,它甚至不应该编译,因为reduceByKey采用Function2<V,V,V> -输入和输出类型必须是相同的。

如果要更改类型,则应使用任意一种combineByKey

代码语言:javascript
复制
public <C> JavaPairRDD<K,C> combineByKey(Function<V,C> createCombiner,
                                     Function2<C,V,C> mergeValue,
                                     Function2<C,C,C> mergeCombiners)

aggregateByKey

代码语言:javascript
复制
public <U> JavaPairRDD<K,U> aggregateByKey(U zeroValue,
                                       Function2<U,V,U> seqFunc,
                                       Function2<U,U,U> combFunc)

两者都可以更改类型并修复当前的问题。有关示例,请参阅Java测试套件:12

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48219029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档