如何在PySpark中制作列名词典?

cbwuti44  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(114)

我正在接收文件,但某些文件得列命名不同.例如:
1.在文件1中,列名为:“学生ID”、“地址”、“电话号码”。
1.在文件2中,列名为:“公用标识”、“公用地址”、“移动的电话号码”。
1.在文件3中,列名为:“S_学生ID”、“S_地址”、“家庭移动的”。
在将文件数据加载到dataframe之后,我希望传递一个字典,在该字典中,我希望传递如下值:

StudentId -> STUDENT_ID
Common_ID -> STUDENT_ID
S_StudentID -> STUDENT_ID

ADDRESS -> S_ADDRESS
Common_Address -> S_ADDRESS
S_ADDRESS  -> S_ADDRESS

这样做的原因是因为在我的下一个 Dataframe 中,我正在阅读列名称,如“学生_ID”、“S_ADDRESS”,如果在 Dataframe 中找不到“S_ADDRESS”、“学生_ID”名称,对于名称未标准化文件,它将抛出错误。我想运行我的 Dataframe ,并在上面的DF中重命名后从这些文件中获取值,还有一个问题,当运行新的DF时,它是否会选择列名称形成其中包含数据字典

yeotifhr

yeotifhr1#

您可以根据需要使用字典,并使用带有列表解析的toDF来重命名列。
输入 Dataframe 和列名:

from pyspark.sql import functions as F

df = spark.createDataFrame([], 'Common_ID string, ADDRESS string, COL3 string')
print(df.columns)
# ['Common_ID', 'ADDRESS', 'COL3']

字典和toDF

dict_cols = {
    'StudentId':    'STUDENT_ID',
    'Common_ID':    'STUDENT_ID',
    'S_StudentID':  'STUDENT_ID',
    'ADDRESS':        'S_ADDRESS',
    'Common_Address': 'S_ADDRESS',
    'S_ADDRESS':      'S_ADDRESS'
}
df = df.toDF(*[dict_cols.get(c, c) for c in df.columns])

结果列名称:

print(df.columns)
# ['STUDENT_ID', 'S_ADDRESS', 'COL3']
chhkpiq4

chhkpiq42#

使用dict和list解析。一个更简单的方法是,即使某些列不在列表中,也可以使用

df.toDF(*[dict_cols[x]  if x in dict_cols else x for x in  df.columns ]).show()

+----------+---------+----+
|STUDENT_ID|S_ADDRESS|COL3|
+----------+---------+----+
+----------+---------+----+

相关问题