我需要替换大型镶木地板文件的多列(100s-1000s列)的值.我用的是火种.
我有一个使用replace
的工作实现,它使用较少的列数,但当列数在replace
的数量级时,甚至需要很长时间才能从我所看到的(>;每列3-4s)生成spark 计划.因此,我正在寻找一种更快的实现.
value_label_map = {"col1": {"val1": "new_val1"}, "col2": {"val2": "new_val2"}}
for k, v in value_label_map.items():
print(f"replacing {k}")
columns_to_replace.append(k)
df = df.replace(to_replace=v, subset=k)
我try 了另一种方法,但我找不到一种方法来访问pysppark Column
对象的值来查找词典.
替代实施
def replace_values(col, value_map):
if value_map:
return when(col.isin(list(value_map.keys())),value_label_map[col]).otherwise(col)
else:
return col
df = spark.read.parquet("some-path")
updated_cols = [replace_values(df[col_name], value_labels.get(col_name)).alias(col_name) for col_name in df_values_renamed.columns]
这样做的问题是,我不能使用Column对象查找value_labels
.