2016-12-07 3 views
0

Я хочу прочитать файл csv в RDD, используя Spark 2.0. Я могу читать его в dataframe с помощьюПрочтите csv в RDD, используя Spark 2.0

df = session.read.csv("myCSV.csv", header=True,) 

и я могу загрузить его в виде текстового файла, а затем обработать его с помощью

import csv 
rdd = context.textFile("myCSV.csv") 
header = rdd.first().replace('"','').split(',') 
rdd = (rdd.mapPartitionsWithIndex(lambda idx, itr: itr.drop(1) if idx == 0 else itr) 
     .mapPartitions(lambda x: csv.reader(x)) 
    ) 

Есть ли способ, чтобы использовать встроенный считыватель CSV (искровым csv), чтобы перейти прямо к RDD без необходимости конвертировать из кадра данных в csv? Или, может быть, вышеупомянутый метод RDD достаточно хорош, поскольку встроенный читатель делает что-то подобное под капотом?

Редактировать: 1) Опять же, я не хочу читать в dataframe и затем конвертировать в RDD. Это создаст целую структуру только для немедленного ее удаления. Кажется бессмысленным. 2) Да, я могу использовать время выше (против преобразования DF -> RDD), но это только скажет мне, если мое решение для чтения RDD лучше, чем преобразование. Встроенный метод csv to RDD скорее всего будет более оптимизирован, чем приведенный выше код.

ответ

1

Вы можете преобразовать dataframe к РДД с помощью .rdd как в ниже

rdd = session.read.csv("myCSV.csv", header=True).rdd 
+1

Как я уже говорил в оригинальный вопрос, без необходимости конвертировать. :) Кажется глупым создать некоторую структуру, а затем сразу же отбросить ее. – Sal

+0

Ах, я пропустил это. Ну, это не стоило бы ничего вычислить, чтобы конвертировать из DF в RDD, но вы правы, вы можете тратить ресурсы на создание структуры. Накладные расходы от создания структуры должны быть довольно небольшими, поскольку CSV определяется первой строкой (например, нет необходимости сканировать весь файл). Это единственный способ узнать наверняка, что он делает некоторые тесты времени. – David

+0

Я мог бы выполнить временные тесты, но если бы существовал встроенный метод, я уверен, что он будет более оптимизирован, чем мое решение выше. Таким образом, время подскажет мне, может ли вышеупомянутое решение работать лучше, чем преобразование. – Sal

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