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

时间:2016-02-28 17:30:47

标签: python lambda apache-spark pyspark

我在我的pyspark地图功能中添加了一个额外的操作。

原始功能是:

results = input.map(lambda row:process_myData(row)) 

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

results = input.map{lambda row:
            row1 = row.replace("abc","def")
            process_myData(row1)}

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

    results = input.map{lambda row:
                       ^
SyntaxError: invalid syntax

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

3 个答案:

答案 0 :(得分:6)

您没有阅读the manual。 Lambda表达式是一个表达式,因此不能包含语句。如果您不相信您可以从以下开始跟踪可能的扩展:

lambda_expr        ::=  "lambda" [parameter_list]: expression
lambda_expr_nocond ::=  "lambda" [parameter_list]: expression_nocond

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

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

input.map(f)

虽然这里只有一个简单的构图就足够了:

input.map(lambda row: process_myData(row.replace("abc","def")))

答案 1 :(得分:1)

你可以这样做:

results = input.map(lambda row: process_myData(row.replace("abc","def")))

但是当有多个指令时你不应该使用lambda。使用功能。

您还使用不同类型的括号:/。

答案 2 :(得分:1)

您获得的语法无效,因为您使用大括号而不是括号。但是,即使你修复了这个问题,你也会遇到另一个语法错误。 lambda表达式为lambda args: return_value。您不能在lambda表达式中进行赋值。为此,您需要定义自己的功能。但是,您无需定义row1。您可以直接将其放入process_myDatalambda row: process_myData(row.replace("abc", "def"))