2014-11-23 2 views
1


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

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

И в конечном итоге с:

4/11/23 10:40:16 ERROR executor.Executor: исключение в задаче 1.0 в стадии 2.0 (TID 5) java.lang.ClassCastException: scala.collection.mutable.ArrayBuffer cann ot be cast to [Ljava.lang.String;

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

Спасибо,
Daniel

+0

Что такое 'column'? 'line (7)' возвращает a является ArrayBuffer, вы не можете превратить его в 'Array [String]' – pedrofurla

+0

У меня возникла аналогичная проблема. Я попытался отобразить мой столбец как asInstanceOf [scala. collection.mutable.ArrayBuffer [(Int, String)]] и asInstanceOf [Iterable [(Int, String)]] для моего приложения, но когда я пытаюсь сопоставить этот RDD с одним, использующим этот столбец, он дает ошибку «GenericRowWithSchema can not быть брошенным в scala.Tuple2 " –

ответ

0

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

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

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

  • раздвоения строки как «» в массив
  • создать массив из первых 4 колонок
  • добавить в массив слиты строки из правого подмассива

код:

val columns = line(7).split(" ") 
columns.take(4) :+ columns.drop(4).mkString(" ") 
+0

Спасибо за ваш ответ, я закончил тем, что выбрал itiable [String] и назвал mkString. Работал отлично :) –

+0

Как это сделать для TUPLES? У меня есть столбец с массивом (Int, String), поэтому я не могу запустить mkString на нем, даже после того, как я передал свой столбец в ArrayBuffer или Iterable –

0

Я закончил тем, что отнес его к Itreable [String] и назвал его mkString.