pyspark:在一个地图函数中具有多个操作的语法错误

Eda*_*ame 0 python lambda apache-spark pyspark

我在我的pyspark map函数中添加了一个额外的操作.

原来的功能是:

results = input.map(lambda row:process_myData(row)) 
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.然后我尝试添加如下的附加操作:

results = input.map{lambda row:
            row1 = row.replace("abc","def")
            process_myData(row1)}
Run Code Online (Sandbox Code Playgroud)

然后我得到了下面的语法错误:

    results = input.map{lambda row:
                       ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?谢谢!

zer*_*323 6

你没看过这本手册.Lambda表达式是一个表达式,因此不能包含语句.如果你不相信你可以从以下开始跟踪可能的扩展:

lambda_expr        ::=  "lambda" [parameter_list]: expression
lambda_expr_nocond ::=  "lambda" [parameter_list]: expression_nocond
Run Code Online (Sandbox Code Playgroud)

如果要使用语句,则必须使用标准函数:

def f(row):
    row1 = row.replace("abc","def")
    return process_myData(row1)

input.map(f)
Run Code Online (Sandbox Code Playgroud)

虽然在这里一个简单的组合就足够了:

input.map(lambda row: process_myData(row.replace("abc","def")))
Run Code Online (Sandbox Code Playgroud)