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(); //将name,age、height这三列内容保存到一个本地文件中 //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(); }
SparkSQL之保存数据
最新推荐文章于 2023-05-08 20:17:49 发布