2016-08-05 55 views
6

spark withColumnRenamed関数を使用して2つの列の名前を変更したいとします。もちろん、私は書くことができます:PySpark - withColumnRenamedを使用して複数の列の名前を変更します。

data = sqlContext.createDataFrame([(1,2), (3,4)], ['x1', 'x2']) 
data = (data 
     .withColumnRenamed('x1','x3') 
     .withColumnRenamed('x2', 'x4')) 

が、私は(新しい名前のリスト/タプルを持つ)ワンステップでこれをやりたいです。残念ながら、このどちら:

data = data.withColumnRenamed(['x1', 'x2'], ['x3', 'x4']) 

もこの:

data = data.withColumnRenamed(('x1', 'x2'), ('x3', 'x4')) 

が働いています。そうすることは可能でしょうか?

答えて

16

withColumnRenamedを使用することはできません。

from pyspark.sql.functions import col 

mapping = dict(zip(['x1', 'x2'], ['x3', 'x4'])) 
data.select([col(c).alias(mapping.get(c, c)) for c in data.columns]) 
私はちょうど建て、どちらか自分のものを簡単にpysparkの解決策を見つけることができませんでした
+0

呼び出し可能ではありません –

2

、類似した:簡単なselectと名前を変更することも可能である

data.toDF('x3', 'x4') 

:あなたはしかしtoDFメソッドを使用することができますpandas 'に。

def rename_columns(df, columns): 
    if isinstance(columns, dict): 
     for old_name, new_name in columns.items(): 
      df = df.withColumnRenamed(old_name, new_name) 
     return df 
    else: 
     raise ValueError("'columns' should be a dict, like {'old_name_1':'new_name_1', 'old_name_2':'new_name_2'}") 

だからあなたのソリューションは、それは私のコードのいくつかの行を保存し

data = rename_columns(data, {'x1': 'x3', 'x2': 'x4'})のように、見て、それはあまりにもあなたを助けることを願っています。 ([data.columnsでCのためのCOL(C).alias(mapping.get(C、C))]) data.select はTypeError: 'strの' オブジェクト私は "strが呼び出し可能なエラーではありません" を取得

+0

受け入れられた解決策は私のためには機能しませんでした。これがトリックでした。ありがとう –

関連する問題