Python 带额外参数的Spark RDD映射
是否可以向pySpark中的映射函数传递额外的参数? 具体来说,我有以下代码配方:Python 带额外参数的Spark RDD映射,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,是否可以向pySpark中的映射函数传递额外的参数? 具体来说,我有以下代码配方: 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对象之外,还接受额外
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)
如何将额外的参数arg1
和arg2
传递给flaMap
函数
flatMap
json_data_rdd.flatMap(lambda j: processDataLine(j, arg1, arg2))
或咖喱processDataLine
f = lambda j: processDataLine(dataline, arg1, arg2)
json_data_rdd.flatMap(f)
processDataLine
:
def processDataLine(arg1, arg2):
def _processDataLine(dataline):
return ... # Do something with dataline, arg1, arg2
return _processDataLine
json_data_rdd.flatMap(processDataLine(arg1, arg2))
curry
decorator:
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))
请注意,我已经将数据行
参数推到了最后一个位置。它不是必需的,但这样我们就不必使用关键字args考虑阅读感谢“AvoHooMAMKA”。据我所知,我需要使用部分函数。但我不知道如何将其应用到我的案例中?为什么不在广播后将processDataLine函数和所需的参数发送到分部函数?@guilhermecgs您可以在本地集合上对此进行基准测试,但显式嵌套(2.)应该是最有效的,其次是使用匿名函数(1)Currying/partials可能会稍微慢一点,因为机制比前两种要复杂得多。并不是说我真的会为此担心。