可以使用iterator
其次toArray
:
import org.apache.spark.rdd.RDD
val arrayRDD: RDD[Array[AnyRef]] = rdd.map(_.iterator.toArray)
或columnValues
方法:
val arrayRDD: RDD[IndexedSeq[AnyRef]] = rdd.map(_.columnValues)
但總體來講是相當無用的,除非你有一個Array[AnyRef]
任何用途。
在實踐中,使用類型感知的獲取方法比如getInt
,getString
更有意義。如果你想提取數據是同質的,你可以映射在指數漲幅列名:
val cols: Array[String] = ??? // Array of column names of the same type
rdd.map(row => cols.map(row.getString(_)))
或
val colsIdxs: Array[Int] = ??? // Array of column indices of the same type
rdd.map(row => colsIdxs.map(row.getString(_)))
如果你想提取異類值,可以如上使用的元組用相同的getter方法。