我的代码如下:
val df = List(
(1,"A1", Map("AR" -> "B", "CE" -> "D")),
(2,"A2", Map("AF" -> "B", "CR" -> "D")),
(3,"A3", Map("AE" -> "B", "CF" -> "D")),
(4,"A4", Map("AS" -> "B", "CG" -> "D")),
(5,"A5", Map("AD" -> "B", "CH" -> "D")),
(6,"A6", Map("AC" -> "B", "CS" -> "D")),
(7,"A7", Map("AB" -> "B", "CA" -> "D"))
).toDF("id", "type", "tags")
df.createOrReplaceTempView("df")
当我跑步时:
spark.sql("select * from df").show()
我得到的结果是:
+---+----+--------------------+
| id|type| tags|
+---+----+--------------------+
| 1| A1|Map(AR -> B, CE -...|
| 2| A2|Map(AF -> B, CR -...|
| 3| A3|Map(AE -> B, CF -...|
| 4| A4|Map(AS -> B, CG -...|
| 5| A5|Map(AD -> B, CH -...|
| 6| A6|Map(AC -> B, CS -...|
| 7| A7|Map(AB -> B, CA -...|
+---+----+--------------------+
我期望的是:
+---+----+----+----+----+----+----+
| id|type| AR| CE| AF| AE| AS|
+---+----+----+----+----+----+----+
| 1| A1| B| D|null|null|null|
| 2| A2|null|null| B|null|null|
| 3| A3|null|null|null| B|null|
| 4| A4|null|null|null|null| B|
| 5| A5|null|null|null|null|null|
| 6| A6|null|null|null|null|null|
| 7| A7|null|null|null|null|null|
+---+----+----+----+----+----+----+
我知道我可以这样获得以上结果:
spark.sql("select id, type, tags.AR, tags.CE, tags.AF, tags.AE, tags.AS from df").show()
我的问题是:“有没有一种简单的方法可以在不列出所有tag.key的情况下实现上述结果?”。因为在某些情况下,我不知道地图上有多少键。