2016-10-03 7 views
6

jestem w stanie napisać to wJak napisać ramkę danych (uzyskaną z tabeli gałęzi) do hadoop SequenceFile i RCFile?

  • ORC
  • PARQUET

    bezpośrednio i

  • TEXTFILE

  • AVRO

użycie dodatkowych zależności z databricks.

<dependency> 
     <groupId>com.databricks</groupId> 
     <artifactId>spark-csv_2.10</artifactId> 
     <version>1.5.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.databricks</groupId> 
     <artifactId>spark-avro_2.10</artifactId> 
     <version>2.0.1</version> 
    </dependency> 

Przykładowy kod:

SparkContext sc = new SparkContext(conf); 
    HiveContext hc = new HiveContext(sc); 
    DataFrame df = hc.table(hiveTableName); 
    df.printSchema(); 
    DataFrameWriter writer = df.repartition(1).write(); 

    if ("ORC".equalsIgnoreCase(hdfsFileFormat)) { 
     writer.orc(outputHdfsFile); 

    } else if ("PARQUET".equalsIgnoreCase(hdfsFileFormat)) { 
     writer.parquet(outputHdfsFile); 

    } else if ("TEXTFILE".equalsIgnoreCase(hdfsFileFormat)) { 
     writer.format("com.databricks.spark.csv").option("header", "true").save(outputHdfsFile); 

    } else if ("AVRO".equalsIgnoreCase(hdfsFileFormat)) { 
     writer.format("com.databricks.spark.avro").save(outputHdfsFile); 
    } 

Czy istnieje jakiś sposób, aby napisać dataframe do Hadoop SequenceFile i rc?

+0

jaki rodzaj pliku sekwencji? csv, json? –

Odpowiedz

2

Można użyć void saveAsObjectFile(String path), aby zapisać RDD jako plik sekwencji zserializowanych obiektów. Więc w twoim przypadku trzeba pobrać RDD z DataFrame:

JavaRDD<Row> rdd = df.javaRDD; 
rdd.saveAsObjectFile(outputHdfsFile); 
+0

To działa. Każdy punkt na piśmie jako format RCFile? –

+0

Nie jestem do końca pewien, ale nie sądzę, że Spark wspiera pisanie do RCFiles po wyjęciu z pudełka po przejrzeniu dokumentacji. Przypuszczam, że musisz użyć czegoś takiego jak Parkiet. – nicoring

+0

@dev ツ Czy możesz oznaczyć to jako odpowiedź, jeśli odpowiedziała na twoje pytanie? – nicoring