2015-11-05 5 views
0

Я пытаюсь прочитать данные из таблицы cassandra и хранить значения в массиве. Мой РДД выглядит как нижеПреобразование строки cassandra RDD в массив кортежей

столбцов: com.datastax.spark.connector.rdd.CassandraTableScanRDD [com.datastax.spark.connector.CassandraRow] = CassandraTableScanRDD [3] в РДУ в CassandraRDD.scala: 15

Как сохранить эти значения в массиве без имен столбцов?

ответ

1

Вы можете использовать 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(_))) 

Если вы хотите извлечь разнородные значения, которые вы можете использовать кортежи с теми же методами геттерных, как указано выше ,

Смежные вопросы