13 python apache-spark pyspark spark-dataframe
我在 pyspark 中有一个超过 100 列的数据框。我想要做的是对于所有我想在列名的开头和列名的末尾添加回勾号(`)的列名。
例如:
column name is testing user. I want `testing user`
Run Code Online (Sandbox Code Playgroud)
在 pyspark/python 中是否有一种方法可以做到这一点。当我们应用代码时,它应该返回一个数据框。
小智 28
在 python 中使用列表理解。
from pyspark.sql import functions as F
df = ...
df_new = df.select([F.col(c).alias("`"+c+"`") for c in df.columns])
Run Code Online (Sandbox Code Playgroud)
此方法还为您提供了在 alias() 函数中添加自定义 Python 逻辑的选项,例如: "prefix_"+c+"_suffix" if c in list_of_cols_to_change else c
添加前缀或后缀:
df.columns
Run Code Online (Sandbox Code Playgroud)
from pyspark.sql.functions import col
select_list = [col(col_name).alias("prefix_" + col_name) for col_name in df.columns]
Run Code Online (Sandbox Code Playgroud)
df.select(*select_list).show()
df = df.select(*select_list)
Run Code Online (Sandbox Code Playgroud)
df.columns 现在将返回新列(别名)的列表。
如果您想向 pyspark 数据框中的多个列添加前缀或后缀,可以使用 for 循环和 .withColumnRenamed()。
例如,您可能喜欢:
def add_prefix(sdf, prefix):
for c in sdf.columns:
sdf = sdf.withColumnRenamed(c, '{}{}'.format(prefix, c))
return sdf
Run Code Online (Sandbox Code Playgroud)
您可以根据需要修改 sdf.columns。
您可以withColumnRenamed结合使用数据框的方法na来创建新的数据框
df.na.withColumnRenamed('testing user', '`testing user`')
Run Code Online (Sandbox Code Playgroud)
编辑:假设您有列列表,您可以这样做 -
old = "First Last Age"
new = ["`"+field+"`" for field in old.split()]
df.rdd.toDF(new)
Run Code Online (Sandbox Code Playgroud)
输出 :
DataFrame[`First`: string, `Last`: string, `Age`: string]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19562 次 |
| 最近记录: |