[英]Iterating on org.apache.spark.sql.Row
我正在使用Spark殼(1.3.1),這是一個Scala殼。 需要在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
的單元格嗎? 是否有任何語法可將基於索引的循環放在最后一個代碼段中row.map(...)
的位置?
您可以在具有地圖的行上使用toSeq()。 toSeq與行的順序相同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.