我在我的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
我在这里做错了什么?谢谢!
答案 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_myData
:lambda row: process_myData(row.replace("abc", "def"))