如果我在 val
,如下所示:
import org.apache.spark.sql.functions._
val col: org.apache.spark.sql.Column = count("*").as("col_name")
``` `col` 属于类型 `org.apache.spark.sql.Column` . 有办法查到它的名字吗( `"col_name"` )? 比如:
col.getName() // returns "col_name"
在这种情况下, `col.toString` 退货 `"count(1) AS col_name"`
2条答案
按热度按时间bmvo0sr51#
试试下面的代码。
如果你改变
.as
&.cast
它会给你错误的结果。你也可以使用
json4s
提取name
从expr.toJSON
```scala> import org.json4s._
import org.json4s._
scala> import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.JsonMethods._
scala> implicit val formats = DefaultFormats
formats: org.json4s.DefaultFormats.type = org.json4s.DefaultFormats$@16cccda5
scala> val cl = count("*").as("column_name").cast("string") // Used cast last.
cl: org.apache.spark.sql.Column = CAST(count(1) AS
column_name
AS STRING)scala> (parse(cl.expr.toJSON) \ "name").extract[String]
res104: String = column_name
toiithl62#
另一个简单的方法是,列名总是被``这些字符覆盖。您可以使用regex或拆分字符串并获取
index 1
元素。与
split
,用正则表达式,
这样做的好处是你甚至包括
.cast("string")
对你来说,它仍然有效。