2016-10-03 22 views
6

tôi có thể viết nó vàoLàm thế nào để viết dataframe (thu được từ bảng hive) vào hadoop SequenceFile và RCFile?

  • ORC
  • PARQUET

    trực tiếp và

  • TEXTFILE

  • AVRO

sử dụng phụ thuộc bổ sung từ 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> 

Mẫu mã:

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

Có cách nào để viết dataframe vào SequenceFile hadoop và RCFile?

+0

loại tệp trình tự nào? csv, json? –

Trả lời

2

Bạn có thể sử dụng void saveAsObjectFile(String path) để lưu RDD dưới dạng SequenceFile của các đối tượng được tuần tự hóa. Vì vậy, trong trường hợp của bạn, bạn phải truy xuất số RDD từ DataFrame:

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

Nó hoạt động. Bất kỳ điểm nào trên văn bản dưới dạng định dạng RCFile phải không? –

+0

Tôi không hoàn toàn chắc chắn, nhưng tôi không nghĩ rằng Spark hỗ trợ viết vào RCFiles ra khỏi hộp, sau khi lướt qua tài liệu. Tôi cho rằng bạn phải sử dụng một cái gì đó như Parquet. – nicoring

+0

@dev ツ Bạn có thể đánh dấu câu trả lời này nếu câu trả lời cho câu hỏi của bạn không? – nicoring

Các vấn đề liên quan