如何在 Pyspark 的动态列列表中转义列名

Posted

技术标签:

【中文标题】如何在 Pyspark 的动态列列表中转义列名【英文标题】:How to escape column names in a dynamic list of column in Pyspark 【发布时间】:2021-07-25 03:21:39 【问题描述】:

我有以下语句动态生成要在连接条件中使用的列列表。 这可以正常工作,但对于具有特殊字符的列会失败。例如名为:ABC#XYZ 的列或中间有空格的列。 我知道反引号可以在 SQL 语句中使用,但在下面的常规 python 语句中我将在哪里插入反引号?

col_list_cond = [" & (  regexp_replace( file_df_new."+ c +",' ','') != regexp_replace(table_df_new."+ c +",' ','')   )" for c in col_list]

【问题讨论】:

【参考方案1】:

您可以尝试使用 python f-strings 并在变量 c 之前和之后添加`:

new_col_list = [f"`col`" if '#' in col else col for col in col_list]

然后使用下面的这个新列表:

col_list_cond = [" & (  regexp_replace( file_df_new."+ c +",' ','') != regexp_replace(table_df_new."+ c +",' ','')   )" for c in new_col_list]

【讨论】:

以上是关于如何在 Pyspark 的动态列列表中转义列名的主要内容,如果未能解决你的问题,请参考以下文章

在 Postgres 中转义类似关键字的列名

如何从 PySpark 中的多个列创建字典列表,其中键是列名,值是该列的值?

如何在 bash 循环列表中转义空格?

cfspreadsheet 在逗号分隔的行插入中转义逗号

在 PostgreSQL 查询中转义列名中的字符?

如何在映射到Spring配置类列表中的环境变量中转义逗号