2017-06-15 126 views
0

在大熊貓可以使用如何在Pyspark中創建數據框的列名稱而無需創建新的數據框?

new_column_name_list =['Pre_'+x for x in df.columns] 
df.columns = new_column_name_list 

我們可以做Pyspark上述相同的步驟「就地」方式重命名一氣呵成的所有列,而不必終於創造新的數據幀?這是低效的,因爲我們將有2個數據幀具有相同的數據,但列名不同導致內存使用不良。

下面的鏈接回答這個問題,但它不是原地。

How to change dataframe column names in pyspark? 編輯 我的問題是從上面的鏈接問題明顯不同

+0

請再次閱讀我的問題。我已經清楚地提到了這個問題與我所問的不同。 –

+0

鏈接問題中的答案似乎回答您的問題,例如'data = data.select(col(「Name」).alias(「name」),col(「askdaosdka」).alias(「age」))' – Yaron

+0

不,因爲創建了新的數據框 –

回答

1

這是你如何能做到這一點的階火花 在地圖上添加新的columncolumn名稱動態,並與選擇別名。

val to = df2.columns.map(col(_)) 

val from = (1 to to.length).map(i => (s"column$i")) 

df2.select(to.zip(from).map { case (x, y) => x.alias(y) }: _*).show 

Previouse列名

"age", "names" 

改變

"column1". "column2" 

然而數據幀後不能被更新,因爲它們是不可變的,但是可以BES分配到新的一個用於進一步使用。只有使用過的數據幀被加載到內存中,所以這不是問題。

希望這會有所幫助

+0

基於上面的代碼,我們不能重命名現有的數據框itseft權利?我們將不得不最後說df3 = df2.select(to.zip(from).map {case(x,y)=> x.alias(y)}:_ *)來做出更改permananent –

+0

Will df2 = df2 .select(to.zip(from).map {case(x,y)=> x.alias(y)}:_ *)工作嗎? –

+0

這不會工作,因爲火花df是不可變的? –

相關問題