Carbondata转csv文件异常处理

将carbondata数据保存为csv文件,可以通过以下方式操作

/**
     * 将查询结果Dataset保存为csv文件
     * @param sql  查询语句
     * @param path csv存放路径(相对HDFS的路径,例如:/opt/csvFile)
     * @param delimiter csv文件分隔符,默认为逗号 delimiter = ",";
     * @return
     */
    public static boolean exportDatasetAsCSV(String sql, String path, String delimiter) {
        if (StringUtils.isBlank(delimiter)) {
            delimiter = ",";
        }
        if (StringUtils.isNotBlank(path) && StringUtils.isNotBlank(sql)) {
            getSparkSession().sql(sql)
                    .coalesce(1)
                    .write()
                    .option("header", "true")   //是否包含csv头
                    .option("sep ", delimiter)  //分隔符,默认为 ,
                    .mode(SaveMode.Overwrite)
                    .csv(path);
            return true;
        }
        return false;
    }
但是,会报异常: java.lang.NoSuchMethodError: com.univocity.parsers.csv.CsvParserSettings. setUnescapedQuoteEnable

异常原因:

Carbondata自带Univocity-parsers版本为1.5.6,而Spark的univocity-parser版本为2.2.1,二者冲突,并且carbondata的jar包放在了spark_classpath下,这就导致在spark调用csv转换的相关方法时,使用的是carbondata内部的univocity-parser,有些方法在1.5.6中不存在,所以报异常NoSuchMethod。


解决方案:

方法一、将carbondata源码打开,修改Maven依赖,将com.univocity版本锁定为2.2.1,并去除1.5.6的冲突依赖;重新编译替换原来的carbondata即可;

方法二、将com.univocity的2.2.1版本jar包放入spark_classpath中(这个方法不一定好用)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值