首页 > 解决方案 > 使用模式更改 pyspark 数据框标头名称

问题描述

我有几个 csv 大约 10 列,我从不同的来源获取数据,标题名称也不同。我正在尝试使用如下模式更改标题名称。

def transform(df):
   schema = StructType([StructField('Name', StringType(), True),
                        StructField('ID', IntegerType(), True),
                        StructField('Volume', DoubleType(), True),
                        StructField('GrossAmount', DoubleType(), True)])
   
    df_transform = spark.createDataFrame(data = df, schema = schema)
    return df_transform

df = transform(spark.read.csv("data1.csv", header = True, inferSchema = True))

但我得到以下错误

TypeError:数据已经是一个DataFrame

请让我知道如何实现这一目标。我想编写一个函数,因此我也可以在其他数据帧上使用它。谢谢。

标签: python-3.xpysparkazure-databricks

解决方案


您可以在文件读取级别定义架构。

mySchema = StructType([StructField('Name', StringType(), True),
                        StructField('ID', IntegerType(), True),
                        StructField('Volume', DoubleType(), True),
                        StructField('GrossAmount', DoubleType(), True)])
   
df = spark.read.csv("data1.csv", header = True, schema = mySchema)

如您所见,数据已经是数据框,因此如果您尝试通过此命令创建数据框,则会出现错误。

spark.createDataFrame(data = df, schema = schema)

另外,python UDF 的性能成本很高,因此如果您可以使用 spark 功能而不是 UDF,建议您避免使用。


推荐阅读