簡體   English   中英

Apache Spark-將JavaRDD轉換為CSV文件

[英]Apache spark - convert JavaRDD to csv file

我嘗試使用Apache Spark將org.apache.spark.api.java.JavaRDD<Object>編寫為管道分隔文本到.txt文件。 為此,我正在使用spark提供的saveAsTextFile方法。 但是這種方法的問題是,它沒有格式化就直接將對象寫入文件,而且我也無法提供正確的文件名。

因此,這是將對象格式化/轉換為豎線分隔的字符串並將其寫入.txt文件的最佳方法,也是命名文件的正確方法。

這是build.gradle依賴build.gradle

dependencies {

provided(
        [group: 'org.apache.spark', name: 'spark-core_2.10', version: '1.4.0'],
        [group: 'org.apache.spark', name: 'spark-sql_2.10', version: '1.4.0'],
        [group: 'com.datastax.spark', name: 'spark-cassandra-connector-java_2.10', version: '1.4.0']
)

    compile([

            [group: 'com.databricks', name: 'spark-csv_2.10', version: '1.4.0'],
    ])


}

這是完整的代碼,可用於格式化數據:

    String args[] = {"/Users/***/Documents/hContent/input/***/micro-/sample.txt",
                    "Users/**/Documents/hadoop/output"}; 


    SparkConf conf = new SparkConf();
    JavaSparkContext sc = new JavaSparkContext("local", "MaxTemperatureSpark", conf);
    JavaRDD<String> lines = sc.textFile(args[0]);


    JavaRDD<String[]> records = lines.map(new Function<String, String[]>(){

        public String[] call(String t){
            return t.split("\t");
        }
    });


    JavaRDD<String[]> filtered = records.filter(new Function<String[], Boolean>() {

        public Boolean call(String[] rec) throws Exception {
            // TODO Auto-generated method stub
            return rec[0] != "9999" && rec[1].matches("[01459]");
        }
    });

    JavaPairRDD<Integer, Integer> tuples = filtered.mapToPair(
            new PairFunction<String[], Integer, Integer>() {

                public Tuple2<Integer, Integer> call(String[] rec) throws Exception {
                    // TODO Auto-generated method stub
                    return new Tuple2<Integer, Integer>(
                            Integer.parseInt(rec[0]), Integer.parseInt(rec[1]));
                }

            }

    );

    JavaPairRDD<Integer, Integer> maxTemps = tuples.reduceByKey(
                new Function2<Integer, Integer, Integer>() {

                    public Integer call(Integer arg0, Integer arg1) throws Exception {
                        // TODO Auto-generated method stub
                        return Math.max(arg0, arg1);
                    }
                }
            );

    maxTemps.saveAsTextFile(args[1]);

請注意,輸出文件夾指定了將在其中創建輸出文件的位置,並且文件名以“ part-00000”開頭。 因此,您可以解析輸出文件夾並搜索文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM