将Lambda函数转换为常规函数

时间:2019-09-30 22:23:16

标签: python apache-spark pyspark

我需要将以下包含几个lambda函数的代码转换为单独的“常规”函数。我该怎么办?

我正在研究Pyspark。数据源是一个RDD

result = rdd.filter(lambda x: x[0]=='9439').map(lambda x: (x[0], json.loads(x[1])['exposures'])).flatMapValues(lambda x: x).map(lambda x: {'serial_no' : x[0], **x[1]})

我的尝试

def acct_tuple(x):
    return (x[0], json.loads(x[1])['exposures'])


def flat_map(x):
    return x

def get_tuple(x):
    return {'serial_no': x[0], **x[1]}


rdd = rdd.map(acct_tuple(x)).flatMapValues(flat_map(x)).map(get_tuple(x))

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您应该将函数本身作为参数传递,并且不要调用它,因此:

def acct_tuple(x):
    return (x[0], json.loads(x[1])['exposures'])


def flat_map(x):
    return x

def get_tuple(x):
    return {'serial_no': x[0], **x[1]}


rdd = rdd.map(acct_tuple).flatMapValues(flat_map).map(get_tuple)