【发布时间】:2017-01-12 06:44:56
【问题描述】:
我正在使用 Spark shell (1.3.1),它是一个 Scala shell。 Row 上需要迭代的简化情况是这样的:
import org.apache.commons.lang.StringEscapeUtils
var result = sqlContext.sql("....")
var rows = result.collect() // Array[org.apache.spark.sql.Row]
var row = rows(0) // org.apache.spark.sql.Row
var line = row.map(cell => StringEscapeUtils.escapeCsv(cell)).mkString(",")
// error: value map is not a member of org.apache.spark.sql.Row
println(line)
我的问题是Row 没有map 并且-据我所知-它无法转换为Array 或List,因此我无法使用这种样式转义每个单元格。我可以使用索引变量编写一个循环,但这会很不方便。我想在这样的情况下迭代单元格:
result.collect().map(row => row.map(cell => StringEscapeUtils.escapeCsv(cell)).mkString(",")).mkString("\n")
(这些通常不是很大的结果,它们可以多次放入客户端内存中。)
有没有办法迭代Row 的单元格?是否有任何语法可以将基于索引的循环放在最后一个 sn-p 中 row.map(...) 的位置?
【问题讨论】:
标签: scala apache-spark