使用Spark DataFrame中的"as"方法

17

我正在查看spark.sql.DataFrame文档。

这里有:

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

这种方法的目的是什么?它如何使用?可以举个例子吗?

我在网上没有找到关于这种方法的任何信息,文档几乎不存在。我无法使用这种方法创建任何类型的别名。

1个回答

27

Spark <= 1.5

这个版本的Spark与SQL表别名差不多:

SELECT *
FROM table AS alias;

以下是从PySpark的alias文档中改编的使用示例:

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""")

这个方法的目的是什么?

基本上是避免模糊的列引用。

Spark 1.6+

还有一个新的as[U](implicit arg0: Encoder[U]): Dataset[U],用于将DataFrame转换为给定类型的DataSet。例如:

df.as[Person]

谢谢。我有印象它是用于某种列别名的。我将发布另一个关于此的问题。 - Prikso NAI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接