2015-08-03 8 views
11

Ho tentato di filtrare le date per i file specifici utilizzando la scintilla Apache all'interno del file nella funzione RDD sc.textFile().Come utilizzare espressioni regolari per includere/escludere alcuni file di input in sc.textFile?

Ho tentato di effettuare le seguenti operazioni:

sc.textFile("/user/Orders/201507(2[7-9]{1}|3[0-1]{1})*") 

Questo dovrebbe corrispondere al seguente:

/user/Orders/201507270010033.gz 
/user/Orders/201507300060052.gz 

Qualsiasi idea di come raggiungere questo obiettivo?

risposta

28

Guardando a the accepted answer, sembra utilizzare una qualche forma di sintassi Glob. Rivela inoltre che l'API è un'esposizione di FileInputFormat di Hadoop.

La ricerca rivela che percorsi forniti a FileInputFormat 's addInputPath o setInputPath"may represent a file, a directory, or, by using glob, a collection of files and directories". Forse, SparkContext utilizza anche tali API per impostare il percorso.

Il syntax of the glob include:

  • * (partita 0 o più caratteri)
  • ? (corrispondenza singolo carattere)
  • [ab] (classe di caratteri)
  • [^ab] (classe di caratteri negata)
  • [a-b] (intervallo caratteri)
  • {a,b} (alternanza)
  • \c (carattere di escape)

Seguendo l'esempio nella risposta accettata, è possibile scrivere il percorso come:

sc.textFile("/user/Orders/2015072[7-9]*,/user/Orders/2015073[0-1]*") 

Non è chiaro come la sintassi alternanza può essere usato qui, poiché la virgola è usata per delimitare un elenco di percorsi (come mostrato sopra). Secondo commento zero323 s', nessun escape è necessario:

sc.textFile("/user/Orders/201507{2[7-9],3[0-1]}*") 
+0

Grazie, '{a, b}' per l'alternanza, non quello che stavo cercando: '(A | B)'. –

+0

Ho provato a escludere i file da un certo tipo, sfortunatamente, senza successo, puoi fornire un esempio? alcune cose come *.^tmp – Modi

Problemi correlati