У меня есть val:
val key: RDD[String]= Seq("0000005","0000001","0000007").toRDD
А также
val file2: Array[String] = Array(("0000005", 82, 79, 16, 21, 80), ("0000001", 46, 39, 8, 5, 21), ("0000004", 58, 71, 20, 10, 6), ("0000009", 60, 89 33 18 6), ("0000003", 30, 50, 71, 36, 30), ("0000007", 50, 2, 33, 15, 62))
Я хотел бы отфильтровать в file2 существует элемент в "ключ"
Я хочу что-то вроде этого:
0000005 82 79 16 21 80 0000001 46 39 8 5 21 0000007 50 2 33 15 62
2 ответа
Я упростил это до стандартных типов Scala
коллекций:
val keys = Seq("0000005","0000001","0000007")
val all = Seq("0000005 82 79 16 21 80",
"0000001 46 39 8 5 21",
"0000004 58 71 20 10 6",
"0000009 60 89 33 18 6",
"0000003 30 50 71 36 30",
"0000007 50 2 33 15 62")
Вот функция фильтра, которая даст ваш результат:
val filtered = all.map(_.split(" ").toList)
.filter{ case x::_ => keys.contains(x) }
.map(_.mkString(" "))
println(filtered) // -> List(0000005 82 79 16 21 80, 0000001 46 39 8 5 21, 0000007 50 2 33 15 62)
См. Scalafiddle
Во-первых, необходимо отобразить file2
для структуры ключ-> значение: (я предполагаю, что все числа в файле2 на самом деле являются строками ..):
val file2Map: RDD[(String, Array[String])] = file2.map(value => (value.head, value)).toRDD
Теперь, если вы это сделаете: keys.join (file2Map) .take (10) .foreach (println)
Результат будет примерно таким:
(0000005, (0000005, 0000005 82 79 16 21 80)
(0000001, (0000001, 0000001 46 39 8 5 21)
(0000007, (0000001, 0000001 50 2 33 15 62)
И из этого легко получить только второй кортеж из значения.
Похожие вопросы
Новые вопросы
scala
Scala - это язык программирования общего назначения, в основном предназначенный для виртуальной машины Java. Разработанный для краткого, элегантного и безопасного для типов представления общих шаблонов программирования, он сочетает в себе как императивный, так и функциональный стили программирования. Его ключевые особенности: продвинутая система статического типа с выводом типа; типы функций; сопоставления с образцом ; неявные параметры и преобразования; перегрузка оператора; полная совместимость с Java; совпадение