Spark SQL处理以下划线开头的列名问题求助
解决Spark SQL处理下划线开头列名的问题
问题
用Spark SQL实现了动态导出数据的功能,可根据选择的表、列、值组合生成CSV文件,但遇到以下划线开头的列名(如_column)时代码无法正常运行,普通列名则没问题。尝试用反引号包裹列名仍未解决,且无法修改现有列名。
解决方案
核心是确保以下划线开头的列名被反引号(`)正确包裹,并且在SQL语句中实际使用处理后的列名变量,同时注意值的格式(字符串值需加单引号):
- 对选中的列名进行反引号包裹处理:
column_enh = f"`{column}`"
- 在Spark SQL语句中使用处理后的列名变量,同时给字符串值加上单引号(数值类型值可省略):
dbutils.widgets.dropdown("column_selection", column_names[0], column_names) column = dbutils.widgets.get("column_selection") # 处理特殊命名的列名 column_enh = f"`{column}`" # 执行SQL查询 result_df = spark.sql(f""" SELECT * FROM {database}.{table} WHERE {column_enh} = '{value}' """) # 导出为CSV文件 result_df.write.csv(f"./output/{table}_{column}_{value}.csv", header=True)
说明
Spark SQL会将以下划线开头的列名识别为特殊标识符,必须用反引号包裹才能正确解析。之前的问题大概率是虽然定义了包裹后的列名变量,但没有在SQL语句中替换原有的{column}变量,或者字符串值未加单引号导致SQL语法错误。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

