如何将数据帧(从hive表中获取)写入hadoop SequenceFile和RCFile?

dev*_*v ツ 6 apache-spark apache-spark-sql spark-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>
Run Code Online (Sandbox Code Playgroud)

示例代码:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法将数据帧写入hadoop SequenceFile和RCFile?

nic*_*ing 2

您可以使用将序列化对象void saveAsObjectFile(String path)另存RDD为 SequenceFile。因此,在您的情况下,您必须RDD从以下位置检索DataFrame:

JavaRDD<Row> rdd = df.javaRDD;
rdd.saveAsObjectFile(outputHdfsFile);
Run Code Online (Sandbox Code Playgroud)