SQL:表到键值表

标签 sql pyspark hql hiveql

我在 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/

相关文章:

pyspark - 使用 jupyter Notebook 将包添加到 pyspark

python - 我如何遍历 "pyspark"中的列表列表以获得特定结果

python - Apache Spark 和 scikit_learn 之间的 KMeans 结果不一致

hibernate 3.6 : registerFunction in SQL dialect not working

sql - 如何将总计添加到此查询?

sql - SQL 的括号表示法在 Microsoft Access 中不起作用

sql - Postgres 计算元素并按日期列

MySQL 选择所有关系均为 x 的位置

java - Hibernate计数NamedQuery与同一实体的多对多关联

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown column 'productId3' in 'where clause'