在Scala中,为什么我必须提供函数作为Apache Spark RDD.sortBy的第一个参数?

wkyowqbh  于 12个月前  发布在  Scala
关注(0)|答案(1)|浏览(136)

我尝试在Scala中对RDD[Double]进行排序,如果我没有提供函数作为第一个参数,就会得到一个错误。在其他情况下,我有一个RDD[(String,Double)],对我来说,提供一个函数进行排序是有意义的,这样Spark就知道要使用哪些值进行排序:


的数据
但是如果RDD只包含Doubles,那么如果值已经是支持排序的类型,为什么还需要指定函数呢?IDE会突出显示一个错误,只有当我提供一个基本上返回与接收到的值相同的伪函数时,该错误才会消失:



为什么会发生这种情况?即使是不必要的,我也需要提供那个虚拟功能吗?
正如你在图片中看到的,我尝试了不同的方法。前两种方法都有效,因为我传递了一个函数。第一种方法返回相同的值。第二种方法将值(已经是Double)转换为Double(IDE将其突出显示为冗余,但如果我删除它,错误会再次出现)。
最后两个是我试图让代码在不突出显示错误的情况下工作。我猜对于第一个,我试图告诉编译器按原样使用RDD,而不使用transform函数。第二个就是不接收它想要的第一个参数。
也许问题是我无法告诉编译器使用RDD,因为它来+我不好理解Scala的隐式参数和排序系统。

bttbmeg0

bttbmeg01#

为什么?因为Spark RDD API就是这么设计的,必须提供排序功能。
通常(在其他集合API中),你会发现一个sortsorted方法不需要排序函数,但Spark的RDD没有。
也就是说,实现你想要的习惯方法是使用现有的identity函数:

someRdd.sortBy(identity)

字符串

相关问题