Используя pyspark
, вы можете использовать greatest
после фильтрации необходимых столбцов и возврата имен столбцов, когда значение столбца не равно нулю:
import pyspark.sql.functions as F
cols = [i for i in df.columns if i!='value'] #['A','B','C']
output = df.select(F.greatest(*[F.when(F.col(i).isNotNull(),i)
for i in cols]).alias("key_type")
,F.greatest(*[F.col(i) for i in cols]).alias("key_Value"),"value")
output.show()
+--------+---------+-----+
|key_type|key_Value|value|
+--------+---------+-----+
| A| key1| v1|
| B| key2| v2|
| C| key3| v3|
| B| key4| v4|
+--------+---------+-----+