Транспонировать строки и столбцы Dataframe в пару ключ-значение - PullRequest
0 голосов
/ 21 мая 2019

У меня есть кадр данных, как показано ниже, теперь мне нужно транспонировать вывод данных в виде пары ключ-значение.Где Key - это ColumnName и Value в качестве columnsValue.

+---+----+------+-----+
|age| dob|gender| name|
+---+----+------+-----+
| 25|1991|     M|Ankit|
+---+----+------+-----+

Обязательный вывод

+-------+-------+
|Key    |Value  |
+-------+-------+
|age    |25     |
|dob    |1991   |
|gender |M      |
|name   |Ankit  |
+-------+-------+

Я попытался использовать пример кода, указанный в следующей ссылке https://codereview.stackexchange.com/questions/200391/pyspark-code-that-turns-columns-into-rows

Но это дает мне ошибку, как показано ниже:

cPickle.PicklingError: Could not serialize object: Py4JError: An error occurred while calling o149.__getnewargs__. Trace:
py4j.Py4JException: Method __getnewargs__([]) does not exist
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326)
    at py4j.Gateway.invoke(Gateway.java:274)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.lang.Thread.run(Thread.java:748)

Любая помощь по этому аспекту будет очень полезна.

1 Ответ

1 голос
/ 21 мая 2019

Другим вариантом в этом случае будет создание MapType ваших столбцов и explode:

from itertools import chain
from pyspark.sql.functions import col, create_map, explode, lit

df.select(
    explode(create_map(*chain.from_iterable([(lit(c), col(c)) for c in df.columns])))
).show()
#+------+-----+
#|   key|value|
#+------+-----+
#|   age|   25|
#|   dob| 1991|
#|gender|    M|
#|  name|Ankit|
#+------+-----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...