Spark RDD -带额外参数的Map

p4rjhz4m  于 2023-08-06  发布在  Apache
关注(0)|答案(1)|浏览(146)

在pySpark中,是否可以向Map函数传递额外的参数?具体来说,我有以下代码配方:

raw_data_rdd = sc.textFile("data.json", use_unicode=True)
json_data_rdd = raw_data_rdd.map(lambda line: json.loads(line))
mapped_rdd = json_data_rdd.flatMap(processDataLine)

字符串
函数processDataLine除了JSON对象之外还需要额外的参数,如下所示:

def processDataLine(dataline, arg1, arg2)


如何将额外的参数arg1arg2传递给flaMap函数?

ut6juiuv

ut6juiuv1#

1.您可以直接在flatMap中使用匿名函数

json_data_rdd.flatMap(lambda j: processDataLine(j, arg1, arg2))

字符串
或咖喱processDataLine

f = lambda j: processDataLine(j, arg1, arg2)
 json_data_rdd.flatMap(f)


1.你可以像这样生成processDataLine

def processDataLine(arg1, arg2):
     def _processDataLine(dataline):
         return ... # Do something with dataline, arg1, arg2
     return _processDataLine

 json_data_rdd.flatMap(processDataLine(arg1, arg2))

  1. toolz库提供了有用的curry装饰器:
from toolz.functoolz import curry

 @curry
 def processDataLine(arg1, arg2, dataline): 
     return ... # Do something with dataline, arg1, arg2

 json_data_rdd.flatMap(processDataLine(arg1, arg2))


注意,我已经将dataline参数推到了最后一个位置。这不是必需的,但这样我们就不必使用关键字args了。
1.最后,Avihoo Mamka已经在评论中提到了functools.partial

相关问题