如何在Spark中检索DataFrame的别名

Dav*_*rio 1 apache-spark apache-spark-sql

我正在使用Spark 2.0.2.我有一个在其上有别名的DataFrame,我希望能够检索它.我想要的简化示例如下.

def check(ds: DataFrame) = {
   assert(ds.count > 0, s"${df.getAlias} has zero rows!")    
}
Run Code Online (Sandbox Code Playgroud)

上面的代码当然失败了,因为DataFrame没有getAlias函数.有没有办法做到这一点?

use*_*411 5

你可以尝试这样的东西,但我不会到目前为止声称它是支持的:

  • Spark <2.1:

    import org.apache.spark.sql.catalyst.plans.logical.SubqueryAlias
    import org.apache.spark.sql.Dataset
    
    def getAlias(ds: Dataset[_]) = ds.queryExecution.analyzed match {
      case SubqueryAlias(alias, _) => Some(alias)
      case _ => None
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • Spark 2.1+:

    def getAlias(ds: Dataset[_]) = ds.queryExecution.analyzed match {
      case SubqueryAlias(alias, _, _) => Some(alias)
      case _ => None
    }
    
    Run Code Online (Sandbox Code Playgroud)

用法示例:

val plain = Seq((1, "foo")).toDF
getAlias(plain)
Run Code Online (Sandbox Code Playgroud)
Option[String] = None
Run Code Online (Sandbox Code Playgroud)
val aliased = plain.alias("a dataset")
getAlias(aliased)
Run Code Online (Sandbox Code Playgroud)
Option[String] = Some(a dataset)
Run Code Online (Sandbox Code Playgroud)