我不是Scala专家,我对使用隐式参数调用方法的语法感到困惑.
这是我的情况:
我有这样的Spark RDD:
val myData: RDD[Array[String]] = ...
Run Code Online (Sandbox Code Playgroud)
并为其定义了订购:
object MyOrdering extends Ordering[Array[String]] = ...
Run Code Online (Sandbox Code Playgroud)
我想过滤这个RDD并根据我的订购获取RDD中的前n个条目.Spark RDD有一种方法可以使用此签名获取前n个条目:
def top(num: Int)(implicit ord: Ordering[T]): Array[T]
Run Code Online (Sandbox Code Playgroud)
最初我尝试了这段代码
myData filter { D =>
D(9) == "yes"
} top(50)(MyOrdering)
Run Code Online (Sandbox Code Playgroud)
哪个失败了这个错误:
error: Int(50) does not take parameters
} top(50)(MyOrdering)
Run Code Online (Sandbox Code Playgroud)
但是,此代码有效:
myData.filter(D => D(9) == "yes").top(50)(MyOrdering)
Run Code Online (Sandbox Code Playgroud)
对于我的初学者来说,失败的代码示例和工作代码示例看起来是指定等效逻辑.我错了吗?我实际上在两个代码示例中做了哪些不同的事情?或者这是Scala编译器如何解析代码的问题?