2016-12-20 9 views
1

Spark 2.0.2を使用しています。私はそれにエイリアスを持っているDataFrameを持っており、それを取得できるようにしたいと思います。なぜ私がそれを望むのかの簡単な例は以下の通りです。SparkでDataFrameのエイリアスを取得する方法

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

DATAFRAMEは何getAliasは機能を持っていないので、当然の上記のコードは失敗します。これを行う方法はありますか?

答えて

2

あなたはこのような何かを試すことができますが、私はそれがサポートされていると主張し、これまで行くだろう。

  • スパーク< 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 
    } 
    
  • スパーク2.1+:

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

例使用方法:

val plain = Seq((1, "foo")).toDF 
getAlias(plain) 
Option[String] = None 
val aliased = plain.alias("a dataset") 
getAlias(aliased) 
Option[String] = Some(a dataset) 
+0

感謝。私は今のところそれを使用することができます。うまくいけば、この機能は後のAPIリリースで追加されます。 –

+0

spark 2.0.2では、SubqueryAliasには2つのパラメータしかないので、それを に変更する必要がありました。SubqueryAlias(alias、_)=> Some(別名) –

関連する問題