2016-02-01 2 views
3

Я пытаюсь создать Dataframe из RDD [cassandraRow] .. Но я не могу, потому что createDataframe (RDD [Row], схема: StructType) нужна RDD [Row] not RDD [cassandraRow].Как преобразовать cassandraRow в строку (искры apache)?

  • Как я могу это достичь?

А также в соответствии с ответом на этот вопрос How to convert rdd object to dataframe in spark

(один из ответов) предложение для использования toDF() на RDD [Роу], чтобы получить Dataframe от РДУ, не работает для меня , Я попытался использовать RDD [Row] в другом примере (пытался использовать toDF()).

  • также неизвестно, как мы можем называть метод Dataframe (toDF()) экземпляром RDD (RDD [Row])?

Я использую Scala. enter image description here

+0

Пробовали ли вы : импорт sqlContext.implicits._ rdd.toDF() ? – doanduyhai

+0

ya .. Я сделал .. но все еще не получил toDF() в inelligence (доступные методы) .. –

+0

Импорт sqlContext.implicits._ имеет важное значение для доступа ко всем дополнительным методам (например, _toDF() _) – doanduyhai

ответ

5

Если вам действительно нужно это, вы всегда можете сопоставить данные Спарк строки:

sqlContext.createDataFrame(
    rdd.map(r => org.apache.spark.sql.Row.fromSeq(r.columnValues)), 
    schema 
) 

, но если вы хотите DataFrames, то лучше импортировать данные непосредственно:

val df = sqlContext 
    .read 
    .format("org.apache.spark.sql.cassandra") 
    .options(Map("table" -> table, "keyspace" -> keyspace)) 
    .load() 
+1

Вы также можете прочитать в своей таблице как «sc.cassandraTable [SomeCaseClass]», но прямой подход выше лучше :) – RussS

+0

@ zero323 Спасибо .. ваш ответ (код) работает правильно. Я .. я знаю, что Dataframes можно достичь напрямую, как вы показали. Но дело в том, что (изображение было просто демонстрацией), у меня может быть довольно большая таблица на моей стороне БД, но я хочу, чтобы у меня было несколько строк. Итак, согласно моему пониманию, у нас есть 2 сценария, которые мы рассмотрим, либо мы можем получить его в RDD, либо сначала сделать Dataframe, а затем извлечь из него эти строки. Я выбираю путь RDD, потому что (по моим сведениям) мы запускаем запросы непосредственно в БД, Продолжаем ... –

+1

Продолжайте .. так что данные (таблица) будут отсортированы в соответствии с операцией на стороне БД и будет возвращен только ResultSet. Но если мы используем Dataframe, он сначала загружает всю таблицу в память и затем выполняет запрос на нее. поэтому мы думаем, что если нам просто нужно несколько строк из очень большой таблицы, мы должны использовать RDD. * Вы можете мне помочь, исправьте меня своими знаниями, если я получаю что-то не так с этим выше Понимание. Спасибо..! –