J'utilise fileStream pour lire les fichiers dans le répertoire hdfs de Spark (contexte de diffusion). Au cas où mon étincelle s'éteindrait et commencerait après un certain temps, j'aimerais lire les nouveaux fichiers du répertoire. Je ne veux pas lire d'anciens fichiers dans le répertoire déjà lu et traité par Spark. J'essaie d'éviter les doublons ici.
val lines = ssc.fileStream[LongWritable, Text, TextInputFormat]("/home/File")
des extraits de code pour aider?
Vous pouvez utiliser l'API FileSystem. Ci-dessous sont les commandes.
import org.Apache.hadoop.fs.FileSystem
import org.Apache.hadoop.fs.Path
val fs=FileSystem.get(sc.hadoopConfiguration)
val outPutPath="/abc"
if(fs.exists(new Path(outPutPath)))
fs.delete(new Path(outPutPath),true)
fileStream
gère déjà cela pour vous - depuis son Scaladoc :
Créez un flux d'entrée qui surveille un système de fichiers compatible Hadoop à la recherche de nouveaux fichiers et les lit à l'aide des types clé-valeur et du format d'entrée donnés.
Cela signifie que fileStream
ne chargerait que nouveaux fichiers (créés après le démarrage du contexte de diffusion), tous les fichiers existant déjà dans le dossier avant le démarrage de votre application de diffusion seraient ignorés.