匿名表达式¶
匿名表达式(也被称作 Lambda 表达式)用于定义作用于列表中每个元素的操作。匿名表达式采用x -> expr的形式,其中x是输入参数,expr是表达式主体。
匿名表达式只能在接受匿名表达式作为参数的函数(即匿名函数)中使用。有关匿名函数的更多信息,请参见匿名函数。
语法¶
- lambda_value_expression
lambda_value_expression ::=
variable '->' value_expression
参数¶
variable¶
匿名表达式中输入参数的名称。
value_expression¶
匿名表达式的主体。表达式主体可以是除聚合表达式和子查询表达式之外的任何值表达式。有关值表达式的更多信息,请参见值表达式。
示例¶
以下示例基于示例数据集。
对列表应用匿名函数transform()¶
RETURN transform(LIST[1, 2, 3], x -> 2 * x + 1) AS a
返回:
+---------+
| a |
+---------+
| [3,5,7] |
+---------+
在上述示例中,x -> 2 * x + 1是一个匿名表达式。transform(LIST[1, 2, 3], x -> 2 * x + 1)是一个函数表达式,transform()是一个匿名函数。匿名表达式x -> 2 * x + 1应用于列表[1, 2, 3]中的每个元素,将其转换为新元素。转换后的列表作为a返回。
对列表应用匿名函数filter()¶
RETURN filter(LIST[1, 2, 3, 4, 5], x -> x % 2 = 0) AS a
返回:
+-------+
| a |
+-------+
| [2,4] |
+-------+
在上述示例中,x -> x % 2 = 0是一个匿名表达式。filter(LIST[1, 2, 3, 4, 5], x -> x % 2 = 0)是一个函数表达式,filter()是一个匿名函数。匿名表达式x -> x % 2 = 0应用于列表[1, 2, 3, 4, 5]中的每个元素,返回一个新列表a,其中仅包含偶数元素。
对列表应用匿名函数reduce()¶
RETURN reduce(LIST[1, 2, 3, 4, 5], 0, (acc, x) -> acc + x) AS a
返回:
+----+
| a |
+----+
| 15 |
+----+
在上述示例中,(acc, x) -> acc + x是一个匿名表达式。reduce(LIST[1, 2, 3, 4, 5], 0, (acc, x) -> acc + x)是一个函数表达式,reduce()是一个匿名函数。匿名表达式(acc, x) -> acc + x应用于列表[1, 2, 3, 4, 5]中的每个元素,将它们累加到初始值0上。累加结果15作为a返回。
在匿名表达式中引用外部变量¶
'''
VALUE `offset` = 10
RETURN transform(LIST[1, 2, 3], x -> x + `offset`) AS a
'''
返回:
+------------+
| a |
+------------+
| [11,12,13] |
+------------+