2015-07-21 52 views
6

我正在查看spark.sql.DataFrame文檔。使用火花DataFrame「as」方法

def as(alias: String): DataFrame 
    Returns a new DataFrame with an alias set. 
    Since 
     1.3.0 

什麼是這種方法的目的是什麼?它是如何使用的?有沒有例子?

我還沒有設法找到任何關於這種方法在線和文檔是不存在的。我沒有設法使用這種方法做任何種類的別名。

回答

14

火花< = 1.5

它或多或少等價於SQL表別名:

SELECT * 
FROM table AS alias; 

實施例的使用適於從PySpark alias documentation

import org.apache.spark.sql.functions.col 
case class Person(name: String, age: Int) 

val df = sqlContext.createDataFrame(
    Person("Alice", 2) :: Person("Bob", 5) :: Nil) 

val df_as1 = df.as("df1") 
val df_as2 = df.as("df2") 
val joined_df = df_as1.join(
    df_as2, col("df1.name") === col("df2.name"), "inner") 
joined_df.select(
    col("df1.name"), col("df2.name"), col("df2.age")).show 

輸出:

+-----+-----+---+ 
| name| name|age| 
+-----+-----+---+ 
|Alice|Alice| 2| 
| Bob| Bob| 5| 
+-----+-----+---+ 

同樣的事情,使用SQL查詢:

df.registerTempTable("df") 
sqlContext.sql("""SELECT df1.name, df2.name, df2.age 
        FROM df AS df1 JOIN df AS df2 
        ON df1.name == df2.name""") 

什麼是這種方法的目的是什麼?

非常多避免含糊不清的列引用。

星火1.6+

還有一個新的as[U](implicit arg0: Encoder[U]): Dataset[U]這是用來轉換DataFrameDataSet給定類型的。例如:

df.as[Person] 
+0

謝謝。我有一個印象,它用於以某種方式別名列。我會發佈一個關於這個問題的問題。 –