2014-11-23 61 views
1



我試圖通過連接它的值來將字符串數組轉換爲字符串的列,但是一些如何無法將該特定列作爲數組字符串:
將schemaRDD中的列轉換爲字符串數組

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

我結束:

23年4月11日10點40分16秒ERROR executor.Executor:在階段2.0在任務1.0異常(TID 5) java.lang.ClassCastException:scala.collection.mutable.ArrayBuffer cann不會被轉換成[Ljava.lang.String;

我在做什麼錯?

感謝,
丹尼爾

+0

什麼是「列」? 'line(7)'給出一個是ArrayBuffer,你不能把它變成'Array [String]' – pedrofurla 2014-11-23 20:11:48

+0

我有類似的問題 - 我試圖把我的列都轉換爲asInstanceOf [scala。我的應用程序的collection.mutable.ArrayBuffer [(Int,String)]]和asInstanceOf [Iterable [(Int,String)]],但是當我試圖將該RDD映射到使用該列的RDD時,它會給出錯誤「GenericRowWithSchema can not被鑄造成scala.Tuple2「 – 2015-09-22 19:56:47

回答

0

我可能無法正確理解你在找什麼,但我會盡力。你需要閱讀線串,並用空格分割字符串成數組

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(" ") 
+0

感謝您的回覆,我最終將其鑄造成Itreable [String]並稱爲mkString。工作完美:) – 2014-11-24 05:29:54

+0

我們如何爲TUPLES做到這一點?我有一個包含(Int,String)數組的列,因此即使在將列轉換爲ArrayBuffer或Iterable之後,我也無法在其上運行mkString – 2015-09-22 19:57:51

0

我最終將它轉換爲Itreable [String]並將其命名爲mkString。