如何从PySpark的Column对象中提取列名的字符串表示?
从PySpark Column对象中提取列名的优雅方法
你用repr截取字符串的方法确实不够稳妥,因为repr的输出格式可能随PySpark版本变动,很容易出问题。这里提供两种更可靠的方法:
方法一:利用Column内部的Java对象引用
PySpark的Column对象持有一个Java层的引用_jc,可以通过它直接调用获取列名的方法:
# 直接获取列名 col_name: str = my_col._jc.name()
或者用toString()方法(输出格式就是列名字符串):
col_name: str = my_col._jc.toString()
注意:_jc属于PySpark的非公开内部属性,虽然在绝大多数版本中都能正常工作,但官方不保证后续版本的兼容性。
方法二:解析Column的表达式字符串
Column对象有一个expr公开属性,存储了对应的表达式字符串,针对简单列名的场景,可以直接提取:
# 对于普通列名,expr的值就是列名字符串 col_name: str = my_col.expr
如果是带表别名的列(比如df.foo),可以拆分字符串取最后一段:
col_name: str = my_col.expr.split('.')[-1]
这种方法依赖表达式字符串的格式,但相比repr更稳定。
内容的提问来源于stack exchange,提问作者user344577
相关产品推荐
相关产品推荐

