No PySpark, encontrei uma maneira útil adicional de analisar arquivos. Talvez haja um equivalente em Scala, mas não me sinto confortável o suficiente com uma tradução de trabalho. Com efeito, é uma chamada textFile com a adição de rótulos (no exemplo abaixo, a chave = nome do arquivo, valor = 1 linha do arquivo).
TextFile "Rotulado"
entrada:
import glob
from pyspark import SparkContext
SparkContext.stop(sc)
sc = SparkContext("local","example") # if running locally
sqlContext = SQLContext(sc)
for filename in glob.glob(Data_File + "/*"):
Spark_Full += sc.textFile(filename).keyBy(lambda x: filename)
output: array com cada entrada contendo uma tupla usando o nome do arquivo como chave e com value = cada linha do arquivo. (Tecnicamente, usando esse método, você também pode usar uma chave diferente, além do nome real do caminho do arquivo - talvez uma representação de hash para economizar memória). ie
[('/home/folder_with_text_files/file1.txt', 'file1_contents_line1'),
('/home/folder_with_text_files/file1.txt', 'file1_contents_line2'),
('/home/folder_with_text_files/file1.txt', 'file1_contents_line3'),
('/home/folder_with_text_files/file2.txt', 'file2_contents_line1'),
...]
Você também pode recombinar como uma lista de linhas:
Spark_Full.groupByKey().map(lambda x: (x[0], list(x[1]))).collect()
[('/home/folder_with_text_files/file1.txt', ['file1_contents_line1', 'file1_contents_line2','file1_contents_line3']),
('/home/folder_with_text_files/file2.txt', ['file2_contents_line1'])]
Ou recombine arquivos inteiros de volta para seqüências de caracteres únicas (neste exemplo, o resultado é o mesmo que você obtém de wholeTextFiles, mas com a sequência "file:" removida do caminho do arquivo.):
Spark_Full.groupByKey().map(lambda x: (x[0], ' '.join(list(x[1])))).collect()
Path
opções se aplicam.