映射 dict(来自 rdd)以递归方式更改 Python/PySpark 中的列名
Posted
技术标签:
【中文标题】映射 dict(来自 rdd)以递归方式更改 Python/PySpark 中的列名【英文标题】:Mapping dict (from rdd) to recursively change column names in Python/PySpark 【发布时间】:2021-06-21 05:29:47 【问题描述】:我有一个带有新变量名(col2)和旧变量名(col1)的数据框。
我有另一个带有列的数据框 (tf)(在 col1 中命名)
期望的结果(tf_new)是将列名转换为col2中的名称(abs->fc_abc)
我现在尝试通过执行以下操作来避免 udf uptil:
#converting df into rdd
newrdd = df.rdd
#generating a map
keypair_rdd = newrdd.map(lambda x : (x[1],x[0]))
#creating key value pair
dict = keypair_rdd.collectAsMap()
在使用 dict 将 tf 转换为 tf_new 方面需要帮助。
Python 中的类似解决方案也会有很大帮助。
【问题讨论】:
【参考方案1】:-
将第一个数据帧收集到 Python 字典中
dict = df.agg(F.map_from_arrays(F.collect_list("col1"),
F.collect_list("col2"))).first()[0]
-
创建
tf
的所有列的列表并重命名dict
中包含的那些列
renamed_cols = [F.col(c).alias(dict[c]) if c in dict
else F.col(c) for c in tf.columns]
-
使用重命名的列来选择数据
tf.select(renamed_cols).show()
【讨论】:
以上是关于映射 dict(来自 rdd)以递归方式更改 Python/PySpark 中的列名的主要内容,如果未能解决你的问题,请参考以下文章
python dict clear只能删除一层,不能够递归删除。