Spark RDD-Mapeo con argumentos adicionales
¿Es posible pasar argumentos adicionales a la función de asignación en pySpark? Específicamente, tengo la siguiente receta de código:
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)
La función processDataLine
toma argumentos adicionales además del objeto JSON, como:
def processDataLine(dataline, arg1, arg2)
¿Cómo puedo pasar los argumentos adicionales arg1
y arg2
a la función flaMap
?
26
1 answers
-
Puede usar una función anónima directamente en un
flatMap
json_data_rdd.flatMap(lambda j: processDataLine(j, arg1, arg2))
O al curry
processDataLine
f = lambda j: processDataLine(dataline, arg1, arg2) json_data_rdd.flatMap(f)
-
Puedes generar
processDataLine
así:def processDataLine(arg1, arg2): def _processDataLine(dataline): return ... # Do something with dataline, arg1, arg2 return _processDataLine json_data_rdd.flatMap(processDataLine(arg1, arg2))
-
toolz
biblioteca proporciona útilcurry
decorador: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))
Tenga en cuenta que he empujado
dataline
argumento a la última posición. No es necesario, pero de esta manera no tenemos que usar args de palabras clave. Finalmente hay
functools.partial
ya mencionado por Avihoo Mamka en los comentarios.
36
Author: zero323,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:33
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:33