Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Pyspark中映射表中的值重命名DataFrame标头_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 如何使用Pyspark中映射表中的值重命名DataFrame标头

Python 如何使用Pyspark中映射表中的值重命名DataFrame标头,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我必须使用Pyspark中映射表(下面的df2)中的值重命名table()的列 谢谢你的帮助 我试着用熊猫做这个,但用我的桌子可以用25分钟。 将熊猫作为pd导入 数据帧({'kod':[1,1,3,4,5],'freq':[4,8,8,20,16],'lsv':[100200300250400]) df2=pd.DataFrame({'oldid':['kod','freq','lsv'],'newid':['code','visions','volume']}) mapping=dict(d

我必须使用Pyspark中映射表(下面的df2)中的值重命名table()的列

谢谢你的帮助

我试着用熊猫做这个,但用我的桌子可以用25分钟。
将熊猫作为pd导入
数据帧({'kod':[1,1,3,4,5],'freq':[4,8,8,20,16],'lsv':[100200300250400])
df2=pd.DataFrame({'oldid':['kod','freq','lsv'],'newid':['code','visions','volume']})
mapping=dict(df2['oldid','newid']].值)
df=df.rename(列=映射)
显示器(df2)
Spark数据帧与Pandas数据帧的工作原理几乎没有什么不同 将pandas数据帧转换为Spark数据帧后

我正在将
freq
的名称更新为
zeq
,只是为了演示排序

df = spark.createDataFrame([(4,1,100),(8,1,200),(8,3,300),(20,4,250),(16,5,400)], ['zeq','kod','lsv'])                
sorted_df = df.select(sorted(df.columns))
sorted_df.show()

+---+---+---+
|kod|lsv|zeq|
+---+---+---+
|  1|100|  4|
|  1|200|  8|
|  3|300|  8|
|  4|250| 20|
|  5|400| 16|
+---+---+---+
报头数据帧

Spark dataframe上提供了一个名为
toDF
的方法,该方法将新标题列列表作为参数,并更新dataframe的标题

所以,根据旧id对数据框进行排序,选择新id,并将该列值转换为如下列表

使用新标题更新数据帧


如果您需要更多详细信息,请告诉我

,但有一点情况是,第一个表中列名的水平顺序和第二个表中新名称的垂直顺序应该相同。在我的示例中,它在第一个表中是[| freq | kod | lsv |],在映射表中是完全不同的顺序。如果有什么方法可以用dict重命名列?@peterthepi我已经用你更新的查询更新了答案。谢谢Suresh,我喜欢这个决定,它非常优雅。非常感谢你!很高兴它起了作用:)它起了很大的作用!谢谢:)
headers = spark.createDataFrame([('code','kod'),('visits','zeq'),('volume','lsv')],['newid','oldid'])
headers.show()
+------+-----+
| newid|oldid|
+------+-----+
|  code|  kod|
|visits|  zeq|
|volume|  lsv|
+------+-----+
sorted_headers_list = headers.sort('oldid').select('newid').rdd.flatMap(lambda x: x).collect()
df_with_updated_headers = sorted_df.toDF(*sorted_headers_list)

df_with_updated_headers.show()
+----+------+------+
|code|volume|visits|
+----+------+------+
|   1|   100|     4|
|   1|   200|     8|
|   3|   300|     8|
|   4|   250|    20|
|   5|   400|    16|
+----+------+------+