pyspark的expr有反函数吗?

问题描述

我知道有一个名为expr函数可以将您的spark sql转换为带有该表达式的spark列:

>>> from pyspark.sql import functions as F 
>>> F.expr("length(name)")
Column<b'length(name)'>

是否有相反的功能-将您的Column转换为pyspark的sql字符串?像这样:

>>> F.inverse_expr(F.length(F.col('name')))
'length(name)'

我发现Column的__repr__可以使您了解列表达式的含义(像Column<b'length(name)'>一样,但是如果没有一些笨拙的解析和字符串替换,它似乎无法在程序上使用。

解决方法

在scala中,我们可以使用column#expr来获取如下所示的sql类型表达式-

length($"entities").expr.toString()
// length('entities)

在pyspark-

print(F.length("name")._jc.expr.container)
# length(name)