我在 HIVE 中有这样的表:
A | B | C | value
key1 |NULL|NULL| v1
NULL | key2 |NULL| v2
NULL |NULL| key3 | v3
NULL | key4 |NULL| v4
将其转换为像这样的键值表的最简单方法是什么:
key_type | key_value | value
A | key1 | v1
B | key2 | v2
C | key3 | v3
B | key4 | v4
使用 Hive-SQL 或 Spark Dataframe 转换 (PySpark)? 感谢您的帮助。
最佳答案
使用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|
+--------+---------+-----+
关于SQL:表到键值表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61339160/