Python Pyspark:根据其他数据帧动态更新数据帧的列位置
我有一个经常改变栏目位置的要求。我没有更改代码,而是创建了一个临时数据框Python Pyspark:根据其他数据帧动态更新数据帧的列位置,python,apache-spark,pyspark,pyspark-sql,Python,Apache Spark,Pyspark,Pyspark Sql,我有一个经常改变栏目位置的要求。我没有更改代码,而是创建了一个临时数据框Index\u df。在这里,我将更新列位置,它应该反映实际的数据帧,在该数据帧上应该执行更改 样本 F_cDc,F_NHY,F_XUI,F_NMY,P_cDc,P_NHY,P_XUI,P_NMY 415 258 854 245 478 278 874 235 405 197 234 456 567 188 108 267 315 458 054 37
Index\u df
。在这里,我将更新列位置,它应该反映实际的数据帧,在该数据帧上应该执行更改
样本
F_cDc,F_NHY,F_XUI,F_NMY,P_cDc,P_NHY,P_XUI,P_NMY
415 258 854 245 478 278 874 235
405 197 234 456 567 188 108 267
315 458 054 375 898 978 677 134
指数
col position
F_cDc,1
F_NHY,3
F_XUI,5
F_NMY,7
P_cDc,2
P_NHY,4
P_XUI,6
P_NMY,8
根据索引_df
,样本_df
应该改变
预期产出:
F_cDc,P_cDc,F_NHY,P_NHY,F_XUI,P_XUI,F_NMY,P_NMY
415 478 258 278 854 874 245 235
405 567 197 188 234 108 456 267
315 898 458 978 054 677 375 134
这里,列位置根据我在Index\u df
我可以做
sample\u df.select(“”)
但我有70多列。从技术上讲,这不是最好的处理方法。您可以通过选择轻松实现这一点
首先,按正确的顺序检索列:
NewColList = Index_df.orderBy("position").select("col").collect()
然后将新订单应用于df
sample_df = sample_df.select(*[i[0] for i in NewColList])
您可以通过选择轻松实现这一点
首先,按正确的顺序检索列:
NewColList = Index_df.orderBy("position").select("col").collect()
然后将新订单应用于df
sample_df = sample_df.select(*[i[0] for i in NewColList])
为什么对70列执行select操作会有问题?我看不出有任何限制。你不能在接下来的步骤中这样做吗?您在哪里显示信息?或许,您应该在pyspark步骤之后执行“示意”部分,在该步骤中,您使用或显示数据@Steven BENET:目前我对70列表有上述要求,因为我需要对具有更多列的表执行相同的操作。请为以上帖子提供解决方案。为什么对70列执行select操作是一个问题?我看不出有任何限制。你不能在接下来的步骤中这样做吗?您在哪里显示信息?或许,您应该在pyspark步骤之后执行“示意”部分,在该步骤中,您使用或显示数据@Steven BENET:目前我对70列表有上述要求,因为我需要对具有更多列的表执行相同的操作。请为以上帖子提供解决方案collect
是否会为您提供Row
对象?您可以使用select(“col”).as(String)
或collect.map(uu.getAs[String](“col”)
最有效的方法是pyspark。难道collect
不会给您行
对象吗?您可以使用select(“col”).as(String)
或collect.map(uu.getAs[String](“col”)
最有效的方法是pyspark。