pyspark -> symbol name

s2j5cfk0  于 2023-10-15  发布在  Spark
关注(0)|答案(1)|浏览(124)

这里使用的pyspark的->符号叫什么?如果我想查询谷歌的查询,使用这个怎么办?我想知道如何用这个做“或”条件。我以为这是lambda,但我们有一个lambda关键字,这也不是' map '。

spark.sql.functions.expr('filter((calls, x -> substring(x.call, 0, 23)))')
uwopmtnx

uwopmtnx1#

这实际上与lambda表达式做同样的事情。在Python中,'filter((calls, x -> substring(x.call, 0, 23)))'部分只是一个字符串。在这个字符串中发生的事情不再是Python的事情了(因此不需要使用lambda关键字)。

一些额外的信息可能会使这里发生的事情变得有点模糊

spark.sql.functions.expr函数期望类似SQL的字符串作为其输入。Spark使用ANTLR将这些类似SQL的字符串解析为查询计划。这个ANTLR解析器使用.g4文件来定义要解析的语法。在源代码中的这些文件中,我们可以确认我在这里所说的(这里使用Spark v3.4.1):
SqlBaseLexer.g4中,->符号被称为ARROW

ARROW: '->';

SqlBarseParser.g4中,这些ARROW表达式得到标签lambda

| identifier ARROW expression                                                              #lambda
    | LEFT_PAREN identifier (COMMA identifier)+ RIGHT_PAREN ARROW expression                   #lambda

在没有深入了解ANTLR如何工作的情况下,您可以看到这个ARROW获得了标签lambda,这暗示了这样一个事实,即它被解析为lambda表达式,但只是具有不同的语法。

相关问题