Как установить заголовки Pyspark Dataframe в другую строку? - PullRequest
0 голосов
/ 30 мая 2018

У меня есть фрейм данных, который выглядит следующим образом:

# +----+------+---------+
# |col1| col2 |  col3   |
# +----+------+---------+
# |  id| name |    val  |
# |  1 |  a01 |    X    |
# |  2 |  a02 |    Y    |
# +---+-------+---------+

Мне нужно создать новый фрейм данных из него, используя строку [1] в качестве заголовков нового столбца и игнорируя или отбрасывая col1, col2,и т.д. ряд.Новая таблица должна выглядеть следующим образом:

# +----+------+---------+
# | id | name |   val   |
# +----+------+---------+
# |  1 |  a01 |    X    |
# |  2 |  a02 |    Y    |
# +---+-------+---------+

Столбцы могут быть переменными, поэтому я не могу использовать имена, чтобы явно установить их в новом фрейме данных.Это не использует панд DF's.

1 Ответ

0 голосов
/ 30 мая 2018

Предполагается, что есть только одна строка с id в столбце 1 , name в столбце 2 и val в столбце 3 , вы можете использовать следующую логику (прокомментированную для ясности и объяснения)

#select the row with the header name 
header = df.filter((df['col1'] == 'id') & (df['col2'] == 'name') & (df['col3'] == 'val'))

#selecting the rest of the rows except the first one 
restDF = df.subtract(header)

#converting the header row into Row 
headerColumn = header.first()

#looping columns for renaming 
for column in restDF.columns:
    restDF = restDF.withColumnRenamed(column, headerColumn[column])

restDF.show(truncate=False)

это должно дать вам

+---+----+---+
|id |name|val|
+---+----+---+
|1  |a01 |X  |
|2  |a02 |Y  |
+---+----+---+

Но лучшим вариантом будет прочитать ее сдля параметра заголовка установлено значение true при чтении кадра данных с использованием sqlContext из источника

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...