簡體   English   中英

在org.apache.spark.sql.Row上迭代

[英]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 ,據我所知,它不能轉換為ArrayList ,因此我無法使用此樣式對每個單元進行轉義。 我可以使用索引變量編寫一個循環,但這會帶來不便。 我想在這種情況下遍歷單元格:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM