从 Azure 容器读取输入 CSV 文件时,如何在 Databricks 中使用 PySpark 动态传递列名称

问题描述 投票:0回答:1

我有一个输入文件employee.csv,存储在包含“Empid”、“Ename”、“Esalary”列的容器中,并且我在 databicks delta Lake 中使用这 3 列创建了一个目标表。

如果我只选择一列,即“Empid”(我需要在 config.ini 配置文件中配置 Empid 列名称),则仅应从输入文件读取该列数据,其他列值将传递 null

pyspark databricks azure-databricks databricks-sql
1个回答
0
投票

为了获得所需的结果,您可以将输入文件 employee.csv 作为数据帧读取,并仅选择“Empid”列。 然后,使用 withColumnRenamed 函数重命名该列以匹配配置文件 (config.ini) 中指定的列。 最后,使用 withColumn 和 lit 函数用空值填充其他两列。

我尝试过以下方法:

csv_file_path = f"abfss://[email protected]/newemp.csv"
df = spark.read.csv(csv_file_path, header=True)
df = df.select('Empid').withColumnRenamed('Empid', 'config_column')
from pyspark.sql.functions import lit
df = df.withColumn('Ename', lit(None)).withColumn('Esalary', lit(None))
delta_path = "/FileStore/tables/Delta/employee"
df.write.format('delta').mode('overwrite').save(delta_path)

结果:

config_column   Ename   Esalary
1   null    null
2   null    null
3   null    null
4   null    null
© www.soinside.com 2019 - 2024. All rights reserved.