python - 如何使用 Pyspark 中映射表中的值重命名 DataFrame 标头
问题描述
我必须使用 Pyspark 中映射表(下面的 df2)中的值重命名表()的列。
谢谢你的帮助!
我试着用熊猫来做,但它在我的桌子上工作了 25 分钟。
import pandas as pd
df = pd.DataFrame({'kod':[1,1,3,4,5], 'freq':[4,8,8,20,16], 'lsv':[100,200,300,250,400]})
df2 = pd.DataFrame({'oldid':['kod','freq','lsv'], 'newid':['code','visits','volume']})
mapping=dict(df2[['oldid', 'newid']].values)
df=df.rename(columns=mapping)
display(df2)
解决方案
将 Pandas 数据帧转换为 Spark 数据帧后,Spark Dataframes 的工作方式与 Pandas 数据帧几乎没有区别
我将名称更新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|
+---+---+---+
标头数据帧
headers = spark.createDataFrame([('code','kod'),('visits','zeq'),('volume','lsv')],['newid','oldid'])
headers.show()
+------+-----+
| newid|oldid|
+------+-----+
| code| kod|
|visits| zeq|
|volume| lsv|
+------+-----+
Spark 数据帧上有一个名为toDF
available 的方法,它将新标题列的列表作为参数并更新数据帧的标题。
因此,根据 oldid 对数据框进行排序并选择新 id 并将该列值转换为如下列表
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|
+----+------+------+
如果您需要更多详细信息,请告诉我
推荐阅读
- java - 无法在片段内设置选项卡布局
- flutter - 根据发送验证的电子邮件中提供的 url 在颤振中打开应用程序
- mysql - mysql 在带有数字的查询中使用 where 忽略尾随字符
- python - Python 创建字典键路径类似于 mkdir -p
- sql - 如何将 CakePHP 3.4 与远程 SQL 数据库连接
- docker - Docker 容器启动问题
- java - android studio studio java参数中的setVisibility函数
- android - 如何使用 RxJava/Rx Android Kotlin 实现对互联网 Android 的检查?
- webrtc - 如何将使用 WebRTC 录制的音频流传递给 Google Speech api 进行实时转录?
- c# - C#: Swagger/Swashbuckle - 使用“AND”连接安全方案