scala - ¿Cómo usar regex para incluir/excluir algunos archivos de entrada en sc.textFile?
apache-spark (1)
He intentado filtrar fechas para archivos específicos usando Apache spark dentro del archivo a la función
sc.textFile()
.
He intentado hacer lo siguiente:
sc.textFile("/user/Orders/201507(2[7-9]{1}|3[0-1]{1})*")
Esto debería coincidir con lo siguiente:
/user/Orders/201507270010033.gz
/user/Orders/201507300060052.gz
¿Alguna idea de cómo lograr esto?
Mirando
la respuesta aceptada
, parece usar alguna forma de sintaxis global.
También revela que la API es una exposición de
FileInputFormat
de Hadoop.
La búsqueda revela que las rutas suministradas a
FileInputFormat
o
addInputPath
setInputPath
"pueden representar un archivo, un directorio o, mediante el uso de glob, una colección de archivos y directorios"
.
Quizás,
SparkContext
también usa esas API para establecer la ruta.
La sintaxis del glob incluye:
-
*
(coincide con 0 o más caracteres) -
?
(coincide con un solo carácter) -
[ab]
(clase de personaje) -
[^ab]
(clase de caracteres negados) -
[ab]
(rango de caracteres) -
{a,b}
(alternancia) -
/c
(carácter de escape)
Siguiendo el ejemplo en la respuesta aceptada, es posible escribir su ruta como:
sc.textFile("/user/Orders/2015072[7-9]*,/user/Orders/2015073[0-1]*")
No está claro cómo se puede usar la sintaxis de alternancia aquí, ya que la coma se usa para delimitar una lista de rutas (como se muestra arriba). Según el comentario de zero323 , no es necesario escapar:
sc.textFile("/user/Orders/201507{2[7-9],3[0-1]}*")