Как переименовать заголовок DataFrame со значениями из таблицы сопоставления в Pyspark - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно переименовать столбцы таблицы () со значениями из таблицы сопоставления (df2 ниже) в Pyspark.

Спасибо за любую помощь!

Я пытался сделать это с пандами, но с моими столами он работает 25 минут.

import pandas as pd
df = pd.DataFrame({'kod':[1,1,3,4,5], 'freq':[4,8,8,20,16], 'lsv':[100,200,300,250,400]}) 

df2 = pd.DataFrame({'oldid':['kod','freq','lsv'], 'newid':['code','visits','volume']}) 

mapping=dict(df2[['oldid', 'newid']].values) 
df=df.rename(columns=mapping)  

display(df2)

1 Ответ

0 голосов
/ 18 июня 2019

Spark Dataframes работает немного иначе, чем фрейм данных Pandas после преобразования ваших фреймов данных Pandas в фреймы данных Spark

Я обновляю имя freq до zeq только для демонстрацииСортировка

df = spark.createDataFrame([(4,1,100),(8,1,200),(8,3,300),(20,4,250),(16,5,400)], ['zeq','kod','lsv'])                
sorted_df = df.select(sorted(df.columns))
sorted_df.show()

+---+---+---+
|kod|lsv|zeq|
+---+---+---+
|  1|100|  4|
|  1|200|  8|
|  3|300|  8|
|  4|250| 20|
|  5|400| 16|
+---+---+---+

заголовок dataFrame

headers = spark.createDataFrame([('code','kod'),('visits','zeq'),('volume','lsv')],['newid','oldid'])
headers.show()
+------+-----+
| newid|oldid|
+------+-----+
|  code|  kod|
|visits|  zeq|
|volume|  lsv|
+------+-----+

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

, поэтому сортируйте ваш фрейм данных на основе oldid, выбирайте новый идентификатор и конвертируйте значения этого столбца в список, как показано ниже

sorted_headers_list = headers.sort('oldid').select('newid').rdd.flatMap(lambda x: x).collect()

обновить ваш фрейм данных с новыми заголовками

df_with_updated_headers = sorted_df.toDF(*sorted_headers_list)

df_with_updated_headers.show()
+----+------+------+
|code|volume|visits|
+----+------+------+
|   1|   100|     4|
|   1|   200|     8|
|   3|   300|     8|
|   4|   250|    20|
|   5|   400|    16|
+----+------+------+

пожалуйста, дайте мне знать, если вам нужно больше деталей

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