Вы можете использовать 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(_)))
Если вы хотите извлечь разнородные значения, которые вы можете использовать кортежи с теми же методами геттерных, как указано выше ,