如何在sparksql查询中引用map列?

g9icjywg  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(537)
scala> val map1 = spark.sql("select map('p1', 's1', 'p2', 's2')")

map1:org.apache.spark.sql.dataframe=[Map(p1,s1,p2,s2):Map<string,string>]

scala> map1.show()

+--------------------+
| map(p1, s1, p2, s2)|
+--------------------+
|[p1 -> s1, p2 -> s2]|
+--------------------+
scala> spark.sql("select element_at(map1, 'p1')")

org.apache.spark.sql.analysisexception:无法解析' map1 '给定输入列:[];第1行位置18;'项目[unsolvedAlias('element_at('map1,p1),none)]
如何在第二个sql查询中重用dataframemap1?

jutyujz0

jutyujz01#

map1 是一个Dataframe,其中有一列类型为map。此列的名称为 map(p1, s1, p2, s2) . 可以使用selectexpr查询Dataframe:

map1.selectExpr("element_at(`map(p1, s1, p2, s2)`, 'p1')").show()

印刷品

+-----------------------------------+
|element_at(map(p1, s1, p2, s2), p1)|
+-----------------------------------+
|                                 s1|
+-----------------------------------+

另一个选项是将Dataframe注册为临时视图,然后使用sql查询:

map1.createOrReplaceTempView("map1")
spark.sql("select element_at(`map(p1, s1, p2, s2)`, 'p1') from map1").show()

打印出相同的结果。

相关问题