SPARK-SQL - 读写数据的时候使用分区 partitionBy()

news/2023/9/21 19:50:48

关键代码 partitionBy()

dataset_1.write().mode(SaveMode.Overwrite).partitionBy("year", "month", "day").parquet(Utils.BASE_PATH + "/trackerSession_partition");

代码示例

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SaveMode;
import org.apache.spark.sql.SparkSession;public class test_24 {public static void main(String[] args) {SparkSession spark = SparkSession.builder().config("spark.driver.host", "localhost").appName("FilePartitionTest").master("local").getOrCreate();spark.sparkContext().setLogLevel("ERROR");Dataset<Row> dataset_1 =spark.read().parquet(Utils.BASE_PATH + "/trackerSession_date");dataset_1.show();
//      +--------------------+-------------------+------------+-------+----+------+--------+
//      |          session_id|session_server_time|cookie_label| cookie|year| month|     day|
//      +--------------------+-------------------+------------+-------+----+------+--------+
//      |520815c9-bdd4-40c...|2017-09-03 12:00:00|          固执|cookie1|2017|201709|20170903|
//      |912a4b47-6984-476...|2017-09-03 12:00:00|          固执|cookie1|2017|201709|20170903|
//      |520815c9-bdd4-40c...|2017-09-04 12:00:00|          固执|cookie1|2017|201709|20170904|
//      |912a4b47-6984-476...|2017-09-04 12:45:01|          固执|cookie1|2017|201709|20170904|
//      |79534f7c-b4dc-4bc...|2017-09-04 12:00:01|         有偏见|cookie2|2017|201709|20170904|
//      |79534f7c-b4dc-4bc...|2017-09-03 12:00:00|         有偏见|cookie2|2017|201709|20170903|
//      +--------------------+-------------------+------------+-------+----+------+--------+dataset_1.createOrReplaceTempView("non_partition_table");spark.sql("select * from non_partition_table where day = 20170903").show();
//      +--------------------+-------------------+------------+-------+----+------+--------+
//      |          session_id|session_server_time|cookie_label| cookie|year| month|     day|
//      +--------------------+-------------------+------------+-------+----+------+--------+
//      |520815c9-bdd4-40c...|2017-09-03 12:00:00|          固执|cookie1|2017|201709|20170903|
//      |912a4b47-6984-476...|2017-09-03 12:00:00|          固执|cookie1|2017|201709|20170903|
//      |79534f7c-b4dc-4bc...|2017-09-03 12:00:00|         有偏见|cookie2|2017|201709|20170903|
//      +--------------------+-------------------+------------+-------+----+------+--------+//保存的时候,对数据按照年月日进行分区 ,关键 partitionBy("year", "month", "day")dataset_1.write().mode(SaveMode.Overwrite).partitionBy("year", "month", "day").parquet(Utils.BASE_PATH + "/trackerSession_partition");Dataset<Row> partitionDF =spark.read().parquet(Utils.BASE_PATH + "/trackerSession_partition");partitionDF.show();
//注意看结果是有一定的顺序的
//      +--------------------+-------------------+------------+-------+----+------+--------+
//      |          session_id|session_server_time|cookie_label| cookie|year| month|     day|
//      +--------------------+-------------------+------------+-------+----+------+--------+
//      |520815c9-bdd4-40c...|2017-09-03 12:00:00|          固执|cookie1|2017|201709|20170903|
//      |912a4b47-6984-476...|2017-09-03 12:00:00|          固执|cookie1|2017|201709|20170903|
//      |79534f7c-b4dc-4bc...|2017-09-03 12:00:00|         有偏见|cookie2|2017|201709|20170903|
//      |520815c9-bdd4-40c...|2017-09-04 12:00:00|          固执|cookie1|2017|201709|20170904|
//      |912a4b47-6984-476...|2017-09-04 12:45:01|          固执|cookie1|2017|201709|20170904|
//      |79534f7c-b4dc-4bc...|2017-09-04 12:00:01|         有偏见|cookie2|2017|201709|20170904|
//      +--------------------+-------------------+------------+-------+----+------+--------+//用sql查询某20170903这天的数据partitionDF.createOrReplaceTempView("partition_table");spark.sql("select * from partition_table where day = 20170903").show();
//      +--------------------+-------------------+------------+-------+----+------+--------+
//      |          session_id|session_server_time|cookie_label| cookie|year| month|     day|
//      +--------------------+-------------------+------------+-------+----+------+--------+
//      |520815c9-bdd4-40c...|2017-09-03 12:00:00|          固执|cookie1|2017|201709|20170903|
//      |912a4b47-6984-476...|2017-09-03 12:00:00|          固执|cookie1|2017|201709|20170903|
//      |79534f7c-b4dc-4bc...|2017-09-03 12:00:00|         有偏见|cookie2|2017|201709|20170903|
//      +--------------------+-------------------+------------+-------+----+------+--------+//直接读目录,取20170903这天的数据Dataset<Row> day03DF =spark.read().parquet(Utils.BASE_PATH +"/trackerSession_partition/year=2017/month=201709/day=20170903");day03DF.show();
//注意看这里的结果,没有了分区的字段信息
//      +--------------------+-------------------+------------+-------+
//      |          session_id|session_server_time|cookie_label| cookie|
//      +--------------------+-------------------+------------+-------+
//      |520815c9-bdd4-40c...|2017-09-03 12:00:00|          固执|cookie1|
//      |912a4b47-6984-476...|2017-09-03 12:00:00|          固执|cookie1|
//      |79534f7c-b4dc-4bc...|2017-09-03 12:00:00|         有偏见|cookie2|
//      +--------------------+-------------------+------------+-------+//bucket只能用于hive表中dataset_1.write().partitionBy("year").bucketBy(24, "cookie").saveAsTable("partition_session");spark.stop();}
}

 


https://www.jiucaihua.cn/news/show-18316.html

相关文章

Redis的两种持久化RDB和AOF

Redis的两种持久化RDB和AOF一、RDB1、介绍2、手动使用3、自动使用4、创建redis日志管理5、缺点二、AOF1、介绍2、修改appendfsync选项3、手动执行AOF4、可以对生成的aof文件进行压缩一、RDB 1、介绍 RDB:以二进制文件的形式保存在硬盘中&#xff0c;方便恢复、数据迁移和备份…

【转】android camera(四):camera 驱动 GT2005

关键词&#xff1a;android camera CMM 模组 camera参数 GT2005 摄像头常见问题 平台信息: 内核&#xff1a;linux系统&#xff1a;android平台&#xff1a;S5PV310(samsung exynos 4210) 作者&#xff1a;xubin341719(欢迎转载&#xff0c;请注明作者) android camera(一)&…

Spring三级缓存解决循环依赖

Spring三级缓存解决循环依赖一、问题的出现1、代码举例2、Spring Bean的循环依赖3、Spring三级缓存二、问题的解决一、问题的出现 通俗的讲就是N个Bean互相引用对方&#xff0c;最终形成闭环。用一副经典的图示可以表示成这样&#xff08;A、B、C都代表对象&#xff0c;虚线代…

Java 8 新特性Lambda 表达式

Java 8 新特性Lambda 表达式一、常用循环二、匿名内部类三、排序集合四、循环打印对象五、根据条件修改六、排序七、求和八、统计方法九、材料一、常用循环 public class Spring3 {public static void main(String[] args) {String[] atp {"yuanGe","daWei&qu…

MySQL创建定时任务

MySQL创建定时任务一、简介1、开启事件计划二、创建事件1、循环定时任务2、定时任务3、修改事件4、删除事件5、两种任务方式三、应用案例一、简介 自MySQL5.1.6起&#xff0c;增加了一个非常有特色的功能-事件调度器&#xff08;Event Scheduler&#xff09;&#xff0c;可以用…

hdu 4657 Find Permutation

思路&#xff1a;用一个数组index[]存放a的下标&#xff0c;初始化令a[i]c[i]index[i]i; 假设当前处理的i&#xff0c;初始时令curi&#xff1b;j为大于i的任意值。每次操作找a[l]c[cur]-b[cur]。 若curl则结束&#xff1b;否则交换a[l]和a[cur]的值以及下标。若l>i,那么结束…

SpringBoot整合lettuce+RedissonSentinel(哨兵模式)

SpringBoot整合lettuceRedissonSentinel&#xff08;哨兵模式&#xff09;一、配置准备1、Pom依赖2、application3、实体类4、测试代码5、效果一、配置准备 哨兵模式安装参考我之前的博客 链接地址 1、Pom依赖 <dependencies><!--redis设置--><dependency>…

C++大数类模板

友情提示&#xff1a;使用该模板的注意了&#xff0c;在大数减法里有一个小错误&#xff0c;导致减法可能会出错 // 原来的写法&#xff0c;将t1.len错写成了len while(t1.a[len - 1] 0 && t1.len > 1) {t1.len--; big--; }// 改正后 while(t1.a[t1.len - 1] 0 &…

matlab 中txt文件(含字符及数值)处理

matlab 中txt文件&#xff08;含字符及数值&#xff09;处理 (2008-08-02 09:45:12) 转载▼标签&#xff1a; 杂谈 分类&#xff1a; matlab及C学习Matlab文件操作及读txt文件ZZ2008-07-11 16:43matlab文件操作文件操作是一种重要的输入输出方式&#xff0c;即从数据文件读取…

HDU 4662 MU Puzzle 数论或者水题

题目链接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid4662 题目是问目标串能否由MI得到&#xff0c;我们可以逆向思维&#xff0c;目标串能否反过来处理得到MI&#xff0c;所以&#xff0c;首先排除M没有出现或者出现超过一次&#xff0c;或者只出现了一次但没有出…