PySpark中别名方法的目的是什么?

时间:2017-09-20 18:31:46

标签: python pyspark pyspark-sql

在Python中学习Spark时,我无法理解alias方法的用途及其用法。 documentation显示它用于创建具有新名称的现有DataFrame的副本,然后将它们连接在一起:

>>> from pyspark.sql.functions import *
>>> df_as1 = df.alias("df_as1")
>>> df_as2 = df.alias("df_as2")
>>> joined_df = df_as1.join(df_as2, col("df_as1.name") == col("df_as2.name"), 'inner')
>>> joined_df.select("df_as1.name", "df_as2.name", "df_as2.age").collect()
[Row(name=u'Bob', name=u'Bob', age=5), Row(name=u'Alice', name=u'Alice', age=2)]

我的问题分为两部分:

  1. alias输入的目的是什么?当我们已经将新的DataFrame分配给变量"df_as1"时,给别名字符串df_as1似乎是多余的。如果我们改为使用df_as1 = df.alias("new_df")"new_df"会出现在哪里?

  2. 一般来说,alias函数何时有用?上面的例子感觉有点人为,但是从探索教程和示例开始,似乎经常使用 - 我只是不清楚它提供的价值。

  3. 编辑:我最初的一些困惑来自于DataFrameColumn都有alias方法的事实。尽管如此,我仍然对上述两个问题感到好奇,问题2现在也适用于Column.alias

1 个答案:

答案 0 :(得分:1)

  1. 变量名称无关紧要,可以是您喜欢的任何名称。它是字符串列标识符和打印输出中使用的别名。

  2. 我认为别名的主要目的是为了更好地简化并避免在列名冲突时可能出现混淆。例如,简单的' age'可以别名为' max_age'为了简洁起见,您搜索了该列中的最大值。或者,您可以为公司中的员工创建一个数据框,并与其自身进行过滤,以便您拥有经理 - 下属对。使用" manager.name"等列名称会很有用。在这样的背景下。