在spark java中保存为Parquet文件

时间:2017-08-28 10:05:02

标签: java apache-spark parquet

我是Spark的新手。我正在尝试使用本地模式(windows)中的spark java将csv文件保存为镶木地板。我收到了这个错误。

引起:org.apache.spark.SparkException:写入行时任务失败

我引用了其他线程并禁用了火花猜测

set(“spark.speculation”,“false”)

我仍然得到错误。我在csv中只使用两列用于测试目的仍然在这个问题上着陆。

输入:

portfolio_id;portfolio_code
1000042;CHNTESTPF04
1000042;CHNTESTPF04
1000042;CHNTESTPF04
1000042;CHNTESTPF04
1000042;CHNTESTPF04
1000042;CHNTESTPF04
1000042;CHNTESTPF04

我的代码:

JavaPairRDD<Integer, String> rowJavaRDD = pairRDD.mapToPair(new PairFunction<String, Integer, String>() {
    private Double[] splitStringtoDoubles(String s){
       String[] splitVals = s.split(";");
       Double[] vals = new Double[splitVals.length];
       for(int i= 0; i < splitVals.length; i++){
           vals[i] = Double.parseDouble(splitVals[i]);
       }
       return vals;
    }

    @Override
    public Tuple2<Integer, String> call(String arg0) throws Exception {
        // TODO Auto-generated method stub
        return null;
    }
});


SQLContext SQLContext;
SQLContext = new org.apache.spark.sql.SQLContext(sc);

Dataset<Row> fundDF = SQLContext.createDataFrame(rowJavaRDD.values(), funds.class);
fundDF.printSchema();

fundDF.write().parquet("C:/test");

请帮助我在这里失踪。

2 个答案:

答案 0 :(得分:1)

在这里回答,所以它从@Glennie Helles Sindholt所说的无人问津的部分开始。对不起发布此

的延迟

我通过在Tuple2()中添加函数拆分来解决错误:

    public void run(String t, String u)

    { 

     public Tuple2<String,String> call(String rec){ 
        String[] tokens = rec.split(";"); 
        String[] vals = new String[tokens.length]; 
        for(int i= 0; i < tokens.length; i++)
       { 
            vals[i] =tokens[i]; 
        } 

      return new Tuple2<String, String>(tokens[0], tokens[1]); 

     } 
   });

答案 1 :(得分:0)

请查找我的Java / Spark代码 1)加载CSV indo Spark Dataset 2)将数据集保存到实木复合地板

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.SparkSession;

SparkSession spark = SparkSession
                    .builder()
                    .appName("csv2parquet")
                    .config("spark.sql.warehouse.dir", "/file:/tmp")
                    .master("local")
                    .getOrCreate();

final String dir = "test.csv";


Dataset<Row> ds = spark.read().option("header", true).option("inferSchema", true).csv(dir);

final String parquetFile = "test.parquet";
final String codec = "parquet";

ds.write().format(codec).save(parquetFile);

spark.stop();

将此添加到您的pom

<dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-core</artifactId>
                <version>2.8.1</version>
</dependency>