使用反引号包裹外键时出现语法错误求助
问题解决:PySpark DataFrame关联时特殊列名的语法错误
你遇到的语法错误确实是因为用反引号通过属性访问(.)特殊列名导致的——Python不支持这种语法,反引号在Python中是旧的repr()语法,不是用来处理特殊属性名的。而你的列名包含|和.这类非标识符字符,直接用.访问会触发语法错误。
正确处理特殊列名的三种方法:
方法1:使用方括号索引(最直接)
把属性访问改成方括号索引,这是Python中处理非标准键名的通用方式:df_results = df_tempTable2.join( df_parent, df_tempTable2["entity_key|inv.entity|entity_id|entity_key|FK"] == df_parent.enterprise_id, "inner" )方法2:使用
col()函数(推荐用于复杂表达式)
导入PySpark的col函数,直接通过字符串指定列名,这种方式在多表关联或复杂过滤时更清晰:from pyspark.sql.functions import col df_results = df_tempTable2.join( df_parent, col("entity_key|inv.entity|entity_id|entity_key|FK") == col("enterprise_id"), "inner" )方法3:先给列起别名(简化后续代码)
如果这个特殊列名要多次使用,可以先用selectExpr给它起一个简洁的别名,后续用别名操作更方便:# 给特殊列名起别名fk df_tempTable2_alias = df_tempTable2.selectExpr( "*", "`entity_key|inv.entity|entity_id|entity_key|FK` as fk" ) # 用别名关联 df_results = df_tempTable2_alias.join(df_parent, df_tempTable2_alias.fk == df_parent.enterprise_id, "inner")
补充说明:
反引号在PySpark的SQL语法中是合法的(比如写selectExpr或者sql()语句时),但在Python代码的属性访问(.)中不适用——因为Python要求属性名必须是合法的标识符(不能包含|、.这类字符)。
内容的提问来源于stack exchange,提问作者Master_GoGo
相关产品推荐
相关产品推荐

