基于 CSV 的 Spark 数据框的 PySpark 列名

Posted

技术标签:

【中文标题】基于 CSV 的 Spark 数据框的 PySpark 列名【英文标题】:PySpark column name of Spark data frame based on CSV 【发布时间】:2020-10-01 08:31:53 【问题描述】:

我得到以下数据框:

+--------+---------------+--------------------+---------+
|province|           city|      infection_case|confirmed|
+--------+---------------+--------------------+---------+
|   Seoul|     Yongsan-gu|       Itaewon Clubs|      139|
|   Seoul|      Gwanak-gu|             Richway|      119|
|   Seoul|        Guro-gu| Guro-gu Call Center|       95|
|   Seoul|   Yangcheon-gu|Yangcheon Table T...|       43|
|   Seoul|      Dobong-gu|     Day Care Center|       43|

现在我想根据 CSV 文件更改列名(第一行),如下所示:

province,any_other__name
city,any_other__name      
infection_case,any_other__name
confirmed,any_other__name   

这是我的代码:

cases = spark.read.load("/home/tool/Desktop/database/TEST/archive/Case.csv",format="csv", sep=",", inferSchema="true", header="true")
cases = cases.select('province','city','infection_case','confirmed')
cases \
  .write \
  .mode('overwrite') \
  .option('header', 'true') \
  .csv('8.csv')

【问题讨论】:

我找到了解决方案 case = cases.selectExpr("province as other names1", "city as other names2", "confirmed as other names3") 【参考方案1】:

最好的解决办法是使用withColumnRenamed方法。

for line in open("path/to/file.csv"):
    old_name, new_name = line.strip().split(",")
    cases = cases.withColumnRenamed(old_name, new_name)

【讨论】:

【参考方案2】:

解决方案在这里 在 pyspark 中使用 selectExpr() 重命名使用“as”关键字将“Old_name”列重命名为“New_name”。

cases = cases.selectExpr("province as names1", "city as names2", "confirmed as names3")

【讨论】:

【参考方案3】:

# Define K,V pair in form of (old_name, new_name). Then 
# By using withColumnRenamed update all required columns

schema = 
        'province':'any_province__name',
        'city':'any_city__name',     
        'infection_case':'any_infection_case__name',
        'confirmed':'any_confirmed__name' 
      

def rename_column(df=None,schema=None):
    for columns in df.columns:
        df = df.withColumnRenamed(columns,schema[columns])
    return df

df_final = rename_column(df=df,schema=schema)

【讨论】:

以上是关于基于 CSV 的 Spark 数据框的 PySpark 列名的主要内容,如果未能解决你的问题,请参考以下文章

如何匹配两个数据框的架构

如何在PySpark中调用python函数?

基于列索引的 Spark Dataframe 选择

基于一百列对在 Spark 数据框中创建新列

将 Pandas 数据框的选择保存到 csv [重复]

spark数据框的转换