Преобразование столбца из schemaRDD в массив строк


Я пытаюсь преобразовать столбец, представляющий собой массив строк, в строку путем объединения его значений, но почему-то не могу связать этот конкретный столбец с массивом строк:

val converted = jsonFiles.map(line=> {line(7).asInstanceOf[Array[String]] })
converted.collect

И я заканчиваю:

11.04.23 10:40:16 ОШИБКА executor.Executor: исключение в задаче 1.0 на этапе 2.0 (TID 5) java.lang.ClassCastException: scala.collection.mutable.ArrayBuffer не может быть приведен к [Ljava.lang.String;

Что я делаю неправильно ?

Спасибо,
Дэниел


person Daniel Haviv    schedule 23.11.2014    source источник
comment
Что такое column? line(7) возвращает ArrayBuffer, вы не можете превратить его в Array[String]   -  person pedrofurla    schedule 23.11.2014
comment
У меня аналогичная проблема - я пытался преобразовать свой столбец как asInstanceOf[scala.collection.mutable.ArrayBuffer[(Int,String)]] и asInstanceOf[Iterable[(Int,String)]] для моего приложение, но когда я пытаюсь сопоставить этот RDD с одним, использующим этот столбец, он дает ошибку GenericRowWithSchema не может быть приведен к scala.Tuple2   -  person Glenn Strycker    schedule 22.09.2015


Ответы (2)


Я могу не правильно понять, что вы ищете, но я попробую. Вам нужно прочитать строку строки и разбить строку на массив пробелами

val converted = jsonFiles.map(line=> {line(7).split(" ")})
converted.collect

Проблема здесь в том, что (зависит от того, что вы делаете) «Исключение в задаче 1.0 на этапе 2.0 (TID 5)» должно быть одной строкой, а не разделенной. Для этого нам нужно:

  • разделить строку как " " в массив
  • создать массив из первых 4 столбцов
  • добавить в этот массив объединенную строку из правого подмассива

код:

val columns = line(7).split(" ")
columns.take(4) :+ columns.drop(4).mkString(" ")
person lukastymo    schedule 23.11.2014
comment
Спасибо за ваш ответ, в итоге я привел его к Itreable[String] и вызвал mkString. Сработало идеально :) - person Daniel Haviv; 24.11.2014
comment
Как мы делаем это для TUPLES? У меня есть столбец с массивом (Int,String), поэтому я не могу запустить на нем mkString, даже после того, как я привел свой столбец либо к ArrayBuffer, либо к Iterable - person Glenn Strycker; 22.09.2015

В итоге я привел его к Itreable[String] и назвал его mkString.

person Daniel Haviv    schedule 25.11.2014