基于 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 列名的主要内容,如果未能解决你的问题,请参考以下文章