Ben Scala uzmanı değilim, ben örtülü bir parametresi olan bir yöntemi çağırmak sözdizimi hakkında karıştı bir yöntemi çağrılırken. Böyle bir Spark RDD varFarklar (açık) örtük parametreleri
:
val myData: RDD[Array[String]] = ...
ve bunun için bir nolarımız tanımlamış:
object MyOrdering extends Ordering[Array[String]] = ...
Bu RDD filtrelemek ve almak istediğiniz İşte
benim durum Siparişime göre RDD'deki en üstteki n girişler.def top(num: Int)(implicit ord: Ordering[T]): Array[T]
Başlangıçta ben bu hata ile başarısız Bu kodu
myData filter { D =>
D(9) == "yes"
} top(50)(MyOrdering)
çalıştı: Bir Kıvılcım RDD Bu imza ile üst n girişlerini germek için bir yöntem vardır Ancak
error: Int(50) does not take parameters
} top(50)(MyOrdering)
, Bu kod çalışır:
myData.filter(D => D(9) == "yes").top(50)(MyOrdering)
Benim acemi göz için, başarısız kod örneği ve işçi kod örneği göz eşdeğer mantığı belirterek edilecek. Burada yanlış mıyım? İki kod örneğinde aslında farklı bir şey yapıyorum? Yoksa Scala derleyicisinin kodu nasıl ayrıştırdığıyla ilgili bir sorun mu var?
Hata, ilkinin, benzer şekilde '(myData) {) (myData filter {D => D (9) ==" yes "}) (50 (MyOrdering))', '(50)' nin alınmadığı şekilde ayrıştırıldığını gösterir. bir yöntem parametresi olarak. hata bildirdi minimal '50 ile yeniden olabilir ("Merhaba!")' mesela. Bu bile, nasıl ayrıştırmak gelmez örtülü (ek parametre listesi) olmadan mı? Yoksa sadece sözdizimi davranışını değiştiren bu ek? 'örtülü val myOrd: bu işler, örneğin, iyi çalışır örtülü parametre listesi olmadan – user2864740
Sipariş [Dizi [dize]] = MyOrdering' ' myData filtre {D => D (9) == "evet" } üst (50) 'kıvılcım olmadan –
daha basit bir örnek listesi (1, 2, 3, 4) filtre (_> 2) SortBy (_ * -1) (scala.math.Ordering.Int)' –