Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带额外参数的Spark RDD映射_Python_Apache Spark_Pyspark_Rdd - Fatal编程技术网

Python 带额外参数的Spark RDD映射

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对象之外,还接受额外

是否可以向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对象之外,还接受额外的参数,如下所示:

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可能会稍微慢一点,因为机制比前两种要复杂得多。并不是说我真的会为此担心。