2016-10-03 11 views
6

私が直接hadoop SequenceFileとRCFileにdataframe(ハイブテーブルから取得)を書き込む方法は?

  • ORC
  • PARQUET

  • TEXTFILE

  • AVRO
にそれを書くことができています

追加の依存関係を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> 

サンプルコード:

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); 
    } 

は、HadoopのSequenceFileとのrcfileにデータフレームを書き込むための方法はありますか?

+0

シーケンスファイルのどのような? csv、json? –

答えて

2

void saveAsObjectFile(String path)を使用すると、RDDをシリアル化オブジェクトのSequenceFileとして保存できます。だからあなたの場合には、あなたがDataFrameからRDDを取得するためにする必要があります。

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

それは働いています。 RCFile形式の書いているところは? –

+0

私は完全にはわかりませんが、SparkがRCFilesの書き出しをサポートしているとは思いません。私はあなたがパーケットのようなものを使用しなければならないと思います。 – nicoring

+0

@devツあなたの質問に答えた場合、これを回答としてマークできますか? – nicoring

関連する問題