重命名 Pyspark Dataframe 中的未命名列

Posted

技术标签:

【中文标题】重命名 Pyspark Dataframe 中的未命名列【英文标题】:Rename unnamed columns in Pyspark Dataframe 【发布时间】:2021-11-16 17:03:41 【问题描述】:

数据在 excel 文件中,这意味着文件格式为“.xlsx”。表的标题已经在前两行之间进行了拆分。我该如何解决?是否有任何解决方案可以为每列取两个名称中的最佳值,并将该列名称作为标题

我在源文件中有这些行:

|Unnamed:_0|Unnamed:_1|Unnamed:_2|Unnamed:_3|Unnamed:_4|Year |2018|2018.1|
|Col1      |Col2      |Col3      |Col4      |Col5      |Month|Jul |Aug   |

我想将表格的标题显示为:

|Col1|Col2|Col3|Col4|Col5|Year_Month|2018_07|2018.1_08|

如果你能帮我提供一个解决方案,我会很高兴,因为我是 pyspark 的新手

【问题讨论】:

文件格式是什么?如果 csv ,@Hubert Dudek 的答案是正确的选择。 文件格式为excel 【参考方案1】:

您可以分享更多代码,但我敢打赌它是 csv 的标头选项:

df = spark.read.format("csv").option("header", "true").load("csvfile.csv")

如果不是 csv,您可以使用模式并在模式中指定列名。架构示例:

schema = StructType([
 StructField('firstname', StringType(), True),
 StructField('middlename', StringType(), True),
 StructField('lastname', StringType(), True),
 StructField('languages', ArrayType(StringType()), True),
 StructField('state', StringType(), True),
 StructField('gender', StringType(), True)])
df = spark.createDataFrame(data = data, schema = schema)

有时对于 csvs 也可以用于从文件中自动检测架构,因此:

df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("csvfile.csv")

如果您从 excel 加载,您也可以使用上述选项,例如

.option("header", "true")

在加载 excel 中有用的也是选项 dataAddress,因为您可以像在 excel 中一样定位表/选择,因此经过一些实验,标题将匹配:

.option("dataAddress", "'My Sheet'!B3:C35")

如果该解决方案中的任何一个不起作用,您可以将第一行提升为标题,但这有点复杂。 @desertnaut 描述了一个优秀的脚本和手册如何做到这一点https://***.com/a/34837299/10972959

【讨论】:

这是针对 csv 文件的情况,我在 .xlsx 中有数据 你能分享代码来加载excel,以便我可以调整它 请检查我的问题,我用代码编辑了它。从这个角度帮助我 编辑了答案并添加了有关 excel 的信息,还链接到可用于将第一行提升为标题的脚本

以上是关于重命名 Pyspark Dataframe 中的未命名列的主要内容,如果未能解决你的问题,请参考以下文章

HDFS中的Pyspark重命名文件

如何使用字典键和值重命名 pandas DataFrame 中的列?

使用别名重命名 pyspark 列

R语言rename重命名dataframe的列名实战:rename重命名dataframe的列名(写错的列名不会被重命名)

PySpark - 使用 withColumnRenamed 重命名多个列

pyspark中的未嵌套列表