SparkSQL之保存数据

public static void main(String[] args) {
    SparkConf conf = new SparkConf();
    conf.set("spark.app.name", "JavaSparkSQLSave");
    conf.set("spark.master", "local");
    JavaSparkContext sc = new JavaSparkContext(conf);
    SQLContext sqlContext = new SQLContext(sc);

    //加载数据 默认加载的数据格式为parquet
    DataFrame df = sqlContext.read().parquet("E:/test/spark/sql/sqldf.parquet");
    df.show();
    /**
     *   +---+------+---+--------+
     |age|height| id|    name|
     +---+------+---+--------+
     | 13|   175|  1|zhangsan|
     | 14|   180|  2|    lisi|
     | 15|   175|  3|  wangwu|
     | 16|   195|  4| zhaoliu|
     | 17|   165|  5|  zhouqi|
     | 18|   155|  6|   weiba|
     +---+------+---+--------+
     */
    /**
     * 计算出age超过14并且身高超过175的个人信息,将其保存到文件中
     */
    /*
 //这是函数式编程的方法来做
    DataFrame retDF = df.select(new Column("id"), new Column("name"), new Column("age"), new Column("height"))
            .filter("age > 14 and height > 160");
    retDF.show();
    */
    //sql的方式来进行操作
    df.registerTempTable("person");
    DataFrame retDF = sqlContext.sql("select id, name, age, height from person where age > 14 and height > 160");
    // retDF.show();
    //nameageheight这三列内容保存到一个本地文件中
    //save保存数据是将结果保存到一个目录下
    /**
     * AnalysisException: path file:/E:/test/spark/sql/out/person.txt already exists.
     * 如果多次向通过一个目录中输出计算结果,有可能导致org.apache.spark.sql.AnalysisException异常---> path already exists
     * 这里就涉及到了save的保存模式
     *
     * SaveMode.ErrorIfExist ----->default 文件存在,保存失败,有异常, path already exists
     * SaveMode.Append      ----->append   在现有的基础之上追加新的数据
     * SaveMode.Overwrite   ----->overwrite 现有目录已经存在,删除之,后建之
     * SaveMode.Ignore      ----->ignore    忽略当前的保存操作,啥事没干
     * 具体设置的话,使用mode()方法进行设置
     */
    // retDF.select("name", "age", "height").write().mode(SaveMode.Ignore).save("E:/test/spark/sql/out");
    retDF.select("name", "age", "height").write().mode(SaveMode.Append).parquet("E:/test/spark/sql/out");
    sc.close();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值