2016-04-17 3 views
1

Я пытаюсь сопоставить некоторые данные, выглядящие так: ("en",(20340,302)) (так что кортеж строки и кортеж: (String, (Int, Int))) в данные выглядят так: (String, Int/Int) (так что пример вывода будет ("en", 67)). Каков синтаксис для этого?Scala Spark - Сопоставление значений кортежа с одиночным

val new = old.map(a,(b,c) => (a, b/c))

является то, что я пытался сделать, не работает, хотя.

ответ

1
val new = old.map { case (a,(b,c)) => (a, b/c) } 

Что синтаксический сахар для:

val new = old.map(t => t match { 
    case (a,(b,c)) => (a, b/c) 
}) 

или уродливее версия:

val new = old.map(t => (t._1, t._2._1/t._2._2)) 
+0

Спасибо! Это работает. Что именно делает ключевое слово case? –

+0

Отредактировано для уточнения - ключевое слово case является частью синтаксиса _pattern matching_, но ключевое слово 'match' может быть опущено при применении к одному входному аргументу анонимной функции –

Смежные вопросы