#pyspark
#pyspark
Вопрос:
Ниже приведен фрейм данных pyspark —
Я хочу преобразовать это в. В основном все 3 столбца идентификаторов расположены рядом друг с другом
Я могу сделать это, создав 3 отдельных фрейма данных для каждого из 3 столбцов id, а затем выполнить объединение всех. Но я ищу решение, которое может достичь этого за меньшее количество строк, потому что у меня есть по крайней мере 25 столбцов id в главном файле.
Комментарии:
1. Не используйте IMAGE!!!!!!!!
Ответ №1:
Попробуйте source_* columns to array
затем explode
выполнить приведение.
Example:
df.show()
# --------- ----------------- ----------------- ----------------- --------
#|movieName|Source_1_movie_id|Source_2_movie_id|Source_3_movie_id| genre|
# --------- ----------------- ----------------- ----------------- --------
#| example1| movie_1| movie_4| movie_7| action|
#| example2| movie_2| movie_5| movie_8|thriller|
#| example3| movie_3| movie_6| movie_9| romance|
# --------- ----------------- ----------------- ----------------- --------
from pyspark.sql.functions import *
df.selectExpr("moviename","explode(array(Source_1_movie_id,Source_2_movie_id,Source_3_movie_id))","genre").
withColumnRenamed("col","id").
orderBy("id").
show()
# --------- ------- --------
#|moviename| id| genre|
# --------- ------- --------
#| example1|movie_1| action|
#| example2|movie_2|thriller|
#| example3|movie_3| romance|
#| example1|movie_4| action|
#| example2|movie_5|thriller|
#| example3|movie_6| romance|
#| example1|movie_7| action|
#| example2|movie_8|thriller|
#| example3|movie_9| romance|
# --------- ------- --------