Pyspark:未定义全局名称

Pyspark: global name is not defined

左外连接后我的数据格式如下:

    # (u'session_id', ((u'prod_id', u'user_id'), (u'prod_label', u'user_id')))

    # (u'u'session_id', ((u'20133', u'129001032'), None))
    # (u'u'session_id', ((u'2024574', u'61370212'), (u'Loc1', u'61370212')))

我现在需要以下格式的数据: (user_id, prod_id, prod_label)

当我这样做时,出现以下错误:

result_rdd = rdd1.map(lambda (session_id, (prod_id,  user_id), (prod_label, user_id)): user_id, prod_id, prod_label)


NameError: global name 'prod_id' is not defined

这根本不是 lambda 表达式的有效语法。如果你想 return 一个元组,它必须用完整的括号来完成:

rdd1.map(lambda (session_id, (prod_id,  user_id_1), (prod_label, user_id_2)): 
    (user_id, prod_id, prod_label))

另请记住,元组参数解包不可移植,并且不允许使用重复的参数名称,否则会导致“SyntaxError”。