Преобразовать список [Seq [String]] в карту [K, V] Scala - PullRequest
0 голосов
/ 10 мая 2018

Я записываю свои данные в Kibana из Spark, создав карту.Мой тип данных List[Seq[String]].Но вместо того, чтобы просто сопоставить ключ со значением, я получаю ключи и несколько назначенных им значений.Таким образом, в конце вместо одного значения, соответствующего ключу и нескольким записям, я получаю несколько значений, соответствующих ключу, и несколько записей, потому что этот процесс повторяется.Таким образом, данные выглядят так:

event_name:"Sketch-Up at Field Museum (DRY MEDIA ONLY)", "Watercolor Basics - Part 2!", "Watercolor Basics (Intro Class)", "Jan: How about a FREE day trip to Mexico? Did I say FREE?", "Dia de Los muertos Day of the dead" 
venue_name:"The Field Museum", "filmfront", "filmfront", "National Museum of Mexican Art", "Dvorak Park (Pilsen)" 
distance:3116.147997575436, 3896.341529919854, 3896.341529919854, 3974.197798056245, 2615.3793888968457  

Хотя я хочу иметь что-то подобное для одной записи:

event_name:"Sketch-Up at Field Museum (DRY MEDIA ONLY)" 
venue_name:"The Field Museum" 
distance:3116.147997575436

Вот мой код для создания карты:

val resultsMap = Map(
    "group_name" -> resultsList.map(sublist => sublist(0)), 
    "event_name" -> resultsList.map(sublist => sublist(1)),  
    "venue_name" -> resultsList.map(sublist => sublist(2)),
    "distance" -> resultsList.map(sublist => sublist(3))
)

Где resultsList: List[Seq[String]]

Что я делаю не так при преобразовании списка в карту?

1 Ответ

0 голосов
/ 10 мая 2018

Обратите внимание, что вы не совсем поняли, какого результата вы ожидаете, или каков реальный вклад, поэтому мне пришлось сделать некоторые предположения. Пожалуйста, будьте более конкретны в следующий раз, когда вы зададите вопрос.

В настоящее время вы создаете один Map и помещаете каждый элемент последовательности в виде списка под тем же ключом:

val resultsMap = Map(...)

Другими словами, все элементы последовательности агрегируются по их позиции под одним ключом.

Вы упомянули, что ожидаете, что они будут отдельными, поэтому я предполагаю, что вы хотите List (или Seq) записей, каждая из которых будет Map. В результате вы не можете получить одну карту, так как ключи не могут быть продублированы на картах.

Вы можете легко получить такой результат, сопоставив свой список последовательностей со списком карт:

val resultsList = List(
  Seq("A", "Sketch-Up at Field Museum (DRY MEDIA ONLY)", "The Field Museum", "3116.147997575436"),
  Seq("A", "Watercolor Basics - Part 2!", "filmfront", "3896.341529919854"),
  Seq("B", "Watercolor Basics (Intro Class)", "filmfront", "3896.341529919854"),
  Seq("B", "Jan: How about a FREE day trip to Mexico? Did I say FREE?", "National Museum of Mexican Art", "3974.197798056245"),
  Seq("A", "Dia de Los muertos Day of the dead", "Dvorak Park (Pilsen)", "2615.3793888968457")
)


val finalResult = resultsList map { s => Map(
  "group_name" -> s(0),
  "event_name" -> s(1),
  "venue_name" -> s(2),
  "distance" -> s(3)
)}

Результат:

List(
  Map(group_name -> A, event_name -> Sketch-Up at Field Museum (DRY MEDIA ONLY), venue_name -> The Field Museum, distance -> 3116.147997575436), 
  Map(group_name -> A, event_name -> Watercolor Basics - Part 2!, venue_name -> filmfront, distance -> 3896.341529919854), 
  Map(group_name -> B, event_name -> Watercolor Basics (Intro Class), venue_name -> filmfront, distance -> 3896.341529919854), 
  Map(group_name -> B, event_name -> Jan: How about a FREE day trip to Mexico? Did I say FREE?, venue_name -> National Museum of Mexican Art, distance -> 3974.197798056245), 
  Map(group_name -> A, event_name -> Dia de Los muertos Day of the dead, venue_name -> Dvorak Park (Pilsen), distance -> 2615.3793888968457)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...