我在pyspark中有一个包含100多列的数据框。我想要做的是所有列名称我想在列名称的开头和列名的末尾添加回标记(`)。
例如:
Array
有没有一种方法可以在pyspark / python中执行此操作。当我们应用代码时,它应该返回一个数据框。
答案 0 :(得分:3)
在python中使用列表理解。
from pyspark.sql import functions as F
df = ...
df_new = df.select([F.col(c).alias("`"+c+"`") for c in df.columns])
此方法还使您可以选择在alias()函数内添加自定义python逻辑,例如:"prefix_"+c+"_suffix" if c in list_of_cols_to_change else c
答案 1 :(得分:2)
您可以将withColumnRenamed
数据框方法与na
结合使用来创建新数据框
df.na.withColumnRenamed('testing user', '`testing user`')
编辑:假设你有列的列表,你可以这样做 -
old = "First Last Age"
new = ["`"+field+"`" for field in old.split()]
df.rdd.toDF(new)
输出:
DataFrame[`First`: string, `Last`: string, `Age`: string]
答案 2 :(得分:1)
我有一个数据框,我重复了两次,然后将其连接在一起。由于两者具有相同的列名,因此我使用了:
df = reduce(lambda df, idx: df.withColumnRenamed(list(df.schema.names)[idx],
list(df.schema.names)[idx] + '_prec'),
range(len(list(df.schema.names))),
df)
数据框中的每个列都带有'_prec'后缀,这使我可以做些甜蜜的事情
答案 3 :(得分:1)
要添加前缀或后缀:
df.columns
from pyspark.sql.functions import col
select_list = [col(col_name).alias("prefix_" + col_name) for col_name in df.columns]
df.select(*select_list).show()
df = df.select(*select_list)
df.columns现在将返回新列的列表(别名)。
答案 4 :(得分:0)
如果要在pyspark数据框中的多个列中添加前缀或后缀,则可以使用for循环和.withColumnRenamed()。
例如,您可能会喜欢:
def add_prefix(sdf, prefix):
for c in sdf.columns:
sdf = sdf.withColumnRenamed(c, '{}{}'.format(prefix, c))
return sdf
您可以根据需要修改sdf.columns。