2017-09-20 61 views
1

雖然在Python學習星火,我無法理解這兩個alias方法及其使用的目的。該documentation顯示它被用來創建新名稱現有DataFrame的副本,然後它們連接在一起:PySpark中別名方法的用途是什麼?

>>> 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輸入的目的?這似乎是多餘的給別名串"df_as1"當我們已經指派新的數據框的變量df_as1。如果我們想改用df_as1 = df.alias("new_df"),那麼"new_df"會出現在哪裏?

  2. 一般來說,當是alias功能有用嗎?上面的例子有點人爲,但從探索教程和例子看起來經常使用 - 我只是不清楚它提供了什麼價值。

編輯:一些我原來混亂的事實來了,無論DataFrameColumnalias方法。儘管如此,我仍然對上述兩個問題都很好奇,問題2現在也適用於Column.alias

回答

1
  1. 變量名是無關緊要的,可以是任何你喜歡它。這是將在字符串列標識符和打印輸出中使用的別名。

  2. 我認爲別名的主要目的是爲了實現更好的簡潔和有衝突的列名時避免可能的混淆。例如,在搜索該列中的最大值之後,簡單地將「年齡」簡稱爲「max_age」。或者你可以爲自己加入的公司中的員工建立一個數據框,並進行過濾,以便擁有經理 - 從屬對​​。在這樣的上下文中使用像「manager.name」這樣的列名是很有用的。

相關問題