2016-04-13 6 views
5

Я читаю набор данных, как показано ниже.Как назначить и использовать заголовки столбцов в Spark?

f = sc.textFile("s3://test/abc.csv") 

В моем файле содержится более 50 полей, и я хочу назначить заголовки столбцов для каждого из полей для ссылки позже в моем скрипте.

Как это сделать в PySpark? Есть ли способ DataFrame?

PS - Новичок для искры.

+1

_Is DataFrame путь сюда? _ - да, это так. Или 'namedtuple', если вы планируете использовать много простого кода Python. – zero323

+0

DataFrame представляет собой комбинацию схемы и rdd. Прямо сейчас переменная «f» в вашем коде является rdd. Итак, если вы добавите в нее схему, вы получите DataFrame. Тогда у него будут заголовки и имена столбцов. Также опубликуйте, что вы можете зарегистрировать эти данные в виде таблицы и выполнить SQL поверх нее. –

ответ

4

Вот как добавить имена столбцов с помощью DataFrame:

Предположим, ваш CSV имеет разделитель «». Подготовьте следующие данные перед передачей его в DataFrame:

f = sc.textFile("s3://test/abc.csv") 
data_rdd = f.map(lambda line: [x for x in line.split(',')]) 

Предположим, данные имеет 3 колонки:

data_rdd.take(1) 
[[u'1.2', u'red', u'55.6']] 

Теперь вы можете указать имена столбцов при передаче этого RDD в DataFrame с помощью toDF():

df_withcol = data_rdd.toDF(['height','color','width']) 

df_withcol.printSchema() 

    root 
    |-- height: string (nullable = true) 
    |-- color: string (nullable = true) 
    |-- width: string (nullable = true) 

Если не указать имена столбцов, вы получите DataFrame с именами столбцов по умолчанию '_1', '_2', ...:

df_default = data_rdd.toDF() 

df_default.printSchema() 

    root 
    |-- _1: string (nullable = true) 
    |-- _2: string (nullable = true) 
    |-- _3: string (nullable = true) 
2

Решение этого вопроса действительно зависит от версии искры, в которой вы работаете. Предполагая, что вы находитесь на Spark 2.0+, вы можете прочитать CSV в качестве DataFrame и добавить столбцы в toDF, что хорошо для преобразования RDD в DataFrame или добавления столбцов в существующий фрейм данных.

filename = "/path/to/file.csv" 
df = spark.read.csv(filename).toDF("col1","col2","col3") 
Смежные вопросы