【问题标题】:how to rename column name of dataframe in pyspark?如何在pyspark中重命名数据框的列名?
【发布时间】:2019-03-27 06:30:46
【问题描述】:

我想从数据框列中重命名一个列名,所以目前列名是rate%year。我想在pyspark 中将其重命名为rateyear

可能,我们可以在将数据框注册为表后在数据框和表级别重命名列,但在表级别“%”会产生问题,所以我想在数据框级别重命名 itelf。

我试过这个-data.selectExpr("rate%year as rateyear")

但收到此错误pyspark.sql.utils.AnalysisException: u"cannot resolve 'rate' given input columns

谢谢。

【问题讨论】:

  • @Matt B,我浏览了链接并尝试了 this-data.selectExpr("rate%year as rateyear") 但收到此错误 pyspark.sql.utils.AnalysisException: u"cannot resolve ' rate'给定输入列。

标签: python dataframe pyspark


【解决方案1】:

试试这个:

sqlContext.registerDataFrameAsTable(data, "myTable")
data = sqlContext.sql("SELECT rate%year AS rateyear from myTable")

【讨论】:

    【解决方案2】:

    我为您编写了一个简单快速的函数,用于从列名中删除 %。享受! :)

    def rename_cols(rename_df):
        for column in rename_df.columns:
            new_column = column.replace('%','')
            rename_df = rename_df.withColumnRenamed(column, new_column)
        return rename_df
    

    【讨论】:

      【解决方案3】:

      更改数据框列名称的简单快捷方法。

      def format_col(df):    
          cols = [col.replace("%", "") for col in df.columns]
          res_df = df.toDF(*cols)
          return res_df
      

      【讨论】:

        【解决方案4】:

        在数据帧级别重命名的可能方式-

        oldColumns=['rate%year']
        newColumns = ["rateyear"]
        df1 = reduce(lambda df, idx: df.withColumnRenamed(oldColumns[idx], newColumns[idx]), xrange(len(oldColumns)), df)
        

        这在数据帧级别运行良好。有什么建议可以在表级别解决吗?

        【讨论】:

        • 只需在将数据框注册为表格之前重命名该列,例如df = df.withColumnRenamed('rate%year', 'rateyear') 然后 sc.registerDataFrameAsTable(data, "myTable") 不需要 reduce 和 lambdas
        猜你喜欢
        • 2019-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 2018-12-24
        • 1970-01-01
        • 1970-01-01
        • 2022-10-05
        相关资源
        最近更新 更多