2014-11-23 63 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。