如何在Scala中将数组转换为字符串

时间:2018-07-27 09:17:34

标签: scala apache-spark

我在数组中有一个单词数据集,例如:

arr: Array[org.apache.spark.sql.Row] = Array([conversionevents], [elements], [pageviews], [productviews], [registrations], [sitepromotionclicks])

当我映射这个词时,我得到:

val v = arr.map(x => println(x.toString))

[conversionevents]
[elements]
[pageviews]
[productviews]
[registrations]
[sitepromotionclicks]

,我会将此数据转换为字符串,以避免使用方括号[]

1 个答案:

答案 0 :(得分:2)

如问题中所述,数据为Array[org.apache.spark.sql.Row],每个Row中只有一个元素。所以最简单的解决方案是

scala> arr.map(x => x(0))
//res1: Array[Any] = Array(conversionevents, elements, pageviews, productviews)
  

我会将此数据转换为字符串,以避免使用方括号[]

scala> arr.map(x => x(0).toString)
//res2: Array[String] = Array(conversionevents, elements, pageviews, productviews)

但是如果您的数据为

//arr: Array[org.apache.spark.sql.Row] = Array([conversionevents,test1], [elements], [pageviews,test21,test22], [productviews])

以上解决方案将拒绝其余值作为

val result = arr.map(x => x(0))
//result: Array[Any] = Array(conversionevents, elements, pageviews, productviews)

最终的解决方案是使用flatMaptoSeq作为

val result = arr.flatMap(x => x.toSeq)
//result: Array[Any] = Array(conversionevents, test1, elements, pageviews, test21, test22, productviews)

当然,如果您想在String中使用它们,可以随时将toString用作

val result = arr.flatMap(x => x.toSeq.map(_.toString))
//result: Array[String] = Array(conversionevents, test1, elements, pageviews, test21, test22, productviews)

我希望答案会有所帮助