2015-05-15 11 views
5

Spark zapewnia metodę saveAsTextFile, która może przechowywać RDD[T] na dysku lub hdfs łatwo.Jak załadować dane z zapisanego pliku za pomocą Spark

T jest dowolną klasą serializowalną.

Chcę cofnąć operację. Zastanawiam się, czy istnieje loadFromTextFile, który może z łatwością załadować plik do RDD[T]?

Pozwól mi jasno:

class A extends Serializable { 
... 
} 

val path:String = "hdfs..." 
val d1:RDD[A] = create_A 

d1.saveAsTextFile(path) 

val d2:RDD[A] = a_load_function(path) // this is the function I want 

//d2 should be the same as d1 

Odpowiedz

10

Spróbuj użyć d1.saveAsObjectFile(path) do zapisania i załaduj val d2 = sc.objectFile[A](path).

Chyba nie można saveAsTextFile i czytać ją jako RDD[A] bez transformacji od RDD[String]

0

Aby utworzyć RDD oparciu plik, możemy użyć SparkContext.textFile API

Poniżej jest przykład:

val TextFile = sc. textFile ("input.txt")

Możemy określić jawnie URI.

Jeśli plik jest w HDFS:
sc.textFile ("HDFS: // host: port/filepath")

Jeśli plik znajduje się w lokalu:
sc.textFile ("file:/// ścieżka do pliku/")

Jeśli plik jest S3:

s3.textFile (" S3N: //mybucket/sample.txt ");

Aby załadować RDD do Speicific typ:

klasy przypadek osobę (name: String, wiek: int)..

val ludzie = sc.textFile ("employees.txt"), mapy (_ rozłam (",")). map (p => Osoba (p (0), p (1) .trim.toInt))

Tutaj ludzie będą należeć do typu org.apache.spark.rdd.RDD [ Osoba]

+0

Ale to generuje RDD [ciąg], muszę RDD [T]. – worldterminator

+0

Myślę, że Spark domyślnie nie obsługuje tego. Ale możesz przekonwertować oryginalny RDD na określony typ. Aktualizuję moją odpowiedź. Proszę zweryfikuj. – Ramana

-1

Jeśli chcesz schemat, prawdopodobnie chcesz użyć typ wyjściowy, który trzyma go (jak Avro, parkiet itp) inaczej kiedy ładowanie trzeba zmapować na RDD i przekonwertować go do schematu (typ), który chcesz.

Jak sugeruje duńskim, można rozważyć użycie SparkSQL/DataFrame który jest zbudowany na pojęciu schematów

Powiązane problemy