scala - 迭代 org.apache.spark.sql.Row

标签 scala apache-spark

我正在使用 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并且 - 据我所知 - 它不能转换为 ArrayList ,所以我无法使用这种样式转义每个单元格。我可以使用索引变量编写一个循环,但这会很不方便。我想在这样的情况下迭代单元格:
result.collect().map(row => row.map(cell => StringEscapeUtils.escapeCsv(cell)).mkString(",")).mkString("\n")

(这些通常不是很大的结果,它们可以多次放入客户端内存中。)

有什么方法可以迭代 Row 的单元格吗? ?是否有任何语法可以将基于索引的循环放在 row.map(...) 的位置?在最后一个片段中?

最佳答案

您可以在具有 map 的 Row 上使用 toSeq()。 toSeq 将与行的顺序相同

关于scala - 迭代 org.apache.spark.sql.Row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30353705/

相关文章:

performance - 在 Scala 中使用 Gatling 创建动态 POST/用户调用

apache-spark - Spark增量加载覆盖旧记录

scala - Spark Submit无法从jar中选择类路径

java - Spark - 使用 OpenCSV 解析文件的序列化问题

scala - 从 Spark 中的单词中删除特殊字符 - scala

scala - IOException : Cannot run program "javac": CreateProcess error=2, 系统找不到指定的文件

scala - 使用类型别名和多参数列表函数进行类型推断

scala - Scala中的更高种类类型

scala - Play 框架模板没有 Html 类型

apache-spark - 为什么Spark认为这是交叉/笛卡尔式联接