首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL、Pandas和Spark:如何实现数据透视

所以,今天本文就围绕数据透视,介绍一下其在SQL、Pandas和Spark中的基本操作与使用,这也是沿承这一系列的文章之一。 ?...03 Spark实现数据透视 Spark作为分布式的数据分析工具,其中spark.sql组件在功能上与Pandas极为相近,在某种程度上个人一直将其视为Pandas在大数据中的实现。...在Spark中实现数据透视的操作也相对容易,只是不如pandas中的自定义参数来得强大。 首先仍然给出在Spark中的构造数据: ?...04 SQL中实现数据透视 这一系列的文章中,一般都是将SQL排在首位进行介绍,但本文在介绍数据透视时有意将其在SQL中的操作放在最后,这是因为在SQL中实现数据透视是相对最为复杂的。...以上就是数据透视SQL、Pandas和Spark中的基本操作,应该讲都还是比较方便的,仅仅是在SQL中需要稍加使用个小技巧。希望能对大家有所帮助,如果觉得有用不妨点个在看!

2.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

spark sql简单查询千亿级库导致的问题

一、问题现象 今天有客户咨询到我们,他们利用spark sql查询简单的sql: select * from datetable limit 5; //假设名是datetable 结果报错内存溢出:...因此,我们用hive原生sql查询,发现不存在这个问题。 二、排查问题 经过分析,发现被查询的数据量特别大,整个有1000多亿行数据。...数据存储在HDFS的目录结构也是: /${hive-warehouse}/dbname/tablename/dt=xxx/hour=xxx/files 根据之前使用spark sql的经验、以及逛社区查找的信息...sql至少会扫描一个完整的第一重分区的数据,当数据量很大的时候,因此往往会出现内存不足。...三、验证结论 1、首先我们直接用spark sql查询: select * from datetable limit 5; 从日志可以查看出excutor在疯狂地扫描HDFS的文件: 而且这些被扫描的

4.9K40

Spark 3.0 新特性 之 自适应查询与分区动态裁剪

Spark憋了一年半的大招后,发布了3.0版本,新特性主要与Spark SQL和Python相关。这也恰恰说明了大数据方向的两大核心:BI与AI。...像Spark会配置一个参数 spark.sql.autoBroadcastJoinThreshold 来决定小于这个配置的就认为是小,然后采用广播策略(默认10MB)。...一般广播的套路是把小拷贝到driver端,然后分发到每个executor工作节点上,因此如果的数据太大,会导致来回复制的数据太多,性能低下,因此BHJ仅适用于广播。...比如某个初始的时候15M,达不到广播join的要求,但是该在查询过程中有个filter条件可以让仅保留8M的有效数据,此时就可以采用广播join了。...3 关联提示 之前在Flink中看到过这种用法,即在sql中使用某种代码提示,让编译器根据代码提示选择优化策略执行。语法如:/** xxx /。

1.4K30

Adaptive Execution 让 Spark SQL 更高效更智能

执行计划一旦生成,便不可更改,即使执行过程中发现后续执行计划可以进一步优化,也只能按原计划执行 CBO 基于统计信息生成最优执行计划,需要提前生成统计信息,成本较大,且不适合数据更新频繁的场景 CBO 基于基础的统计信息与操作对数据的影响推测中间结果的信息...核心在于两点 执行计划可动态调整 调整的依据是中间结果的精确统计信息 2 动态设置 Shuffle Partition 2.1 Spark Shuffle 原理 Spark Shuffle 一般用于将上游...但对于中间的 Join,无法提前准确判断中间大小从而精确判断是否适合使用 BroadcastJoin 《Spark SQL 性能优化再进一步 CBO 基于代价的优化》一文介绍的 CBO 可通过的统计信息与各操作对数据统计信息的影响...,推测出中间的统计信息,但是该方法得到的统计信息不够准确。...5 Spark 系列文章 Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势 Spark SQL / Catalyst 内部原理 与 RBO Spark SQL 性能优化再进一步

94010

Spark SQL解析查询parquet格式Hive获取分区字段和查询条件

首先说一下,这里解决的问题应用场景: sparksql处理Hive数据时,判断加载的是否是分区,以及分区的字段有哪些?再进一步限制查询分区必须指定分区?...这里涉及到两种情况:select SQL查询和加载Hive路径的方式。这里仅就"加载Hive路径的方式"解析分区表字段,在处理时出现的一些问题及解决作出详细说明。...如果大家有类似的需求,笔者建议通过解析Spark SQL logical plan和下面说的这种方式解决方案结合,封装成一个通用的工具。...问题现象 sparksql加载指定Hive分区路径,生成的DataSet没有分区字段。...解决方案(亲测有效) 1.在Spark SQL加载Hive数据路径时,指定参数basePath,如 sparkSession.read.option("basePath","/spark/dw/test.db

2.5K10

spark sql 非业务调优

默认的参数已经很好了,对于GC算法,spark sql可以尝试一些 G1。 下面文章建议多读几遍,记住最好。 必背|spark 内存,GC及数据结构调优 2,内存调优 缓存 spark2....批次大有助于改善内存使用和压缩,但是缓存数据会有OOM的风险 3,广播 大小进行join时,广播到所有的Worker节点,来提升性能是一个不错的选择。...属性 默认值 描述 spark.sql.broadcastTimeout 300 广播等待超时时间,单位秒 spark.sql.autoBroadcastJoinThreshold 10485760 (...10 MB) 最大广播的大小。...别动不动就缓存,有时候重新加载比缓存速度都快。 该广播广播,不该广播的时候就别广播,就一个批次执行完的任务你广播毛线。 。。。。。 多测几次,得出自己的经验。

1.2K30

【大数据】Spark优化经验&案例--数据倾斜

粗暴的临时解决方法 增大partition数, 让partition中的数据量<2g 由于是left join触发了shuffle操作, 而spark默认join时的分区数为200(即spark.sql.shuffle.partitions...=200), 所以增大这个分区数, 即调整该参数为800, 即spark.sql.shuffle.partitions=800 2.3....确认数据倾斜 方法一: 通过sample算子对DataSet/DataFrame/RDD进行采样, 找出top n的key值及数量 方法二: 源数据/中间数据落到存储中(如HIVE), 直接查询观察 3.2...非法数据) 业务无关的数据 分析join操作, 左右的特征, 判断是否可以进行小广播 broadcast 这样可避免shuffle操作,特别是当大特别大 默认情况下, join时候, 如果的数据量低于...spark.sql.autoBroadcastJoinThreshold参数值时(默认值为10 MB), spark会自动进行broadcast, 但也可以通过强制手动指定广播 visitor_df.join

2.9K85

工作经验分享:Spark调优【优化后性能提升1200%】

粗暴的临时解决方法 增大partition数, 让partition中的数据量<2g 由于是left join触发了shuffle操作, 而spark默认join时的分区数为200(即spark.sql.shuffle.partitions...=200), 所以增大这个分区数, 即调整该参数为800, 即spark.sql.shuffle.partitions=800 2.3....确认数据倾斜 方法一: 通过sample算子对DataSet/DataFrame/RDD进行采样, 找出top n的key值及数量 方法二: 源数据/中间数据落到存储中(如HIVE), 直接查询观察...“脏数据”(非法数据) 业务无关的数据 3.分析join操作, 左右的特征, 判断是否可以进行小广播 broadcast (1)这样可避免shuffle操作,特别是当大特别大 (2)默认情况下,...join时候, 如果的数据量低于spark.sql.autoBroadcastJoinThreshold参数值时(默认值为10 MB), spark会自动进行broadcast, 但也可以通过强制手动指定广播

1.5K10

【硬刚大数据】从零到大数据专家面试篇之SparkSQL篇

满足什么条件的才能被广播 如果一个的大小小于或等于参数spark.sql.autoBroadcastJoinThreshold(默认10M)配置的值,那么就可以广播。...,我们也可以通过直接在Spark SQL中显示使用hint方式(/+ BROADCAST(small_table) /),直接指定要广播,源码如下: private def canBroadcastByHints...hint进行广播,最终都会调用broadcastSide,来决定应该广播哪个: private def broadcastSide( canBuildLeft: Boolean,...而Spark SQL中的BroadcastNestedLoopJoin就类似于Nested Loop Join,只不过加上了广播(build table)而已。...对于做平台的小伙伴儿,想必深有感触)】 分析Spark SQL的逻辑计划和物理计划,通过程序解析计划推断SQL最终是否选择了笛卡尔积执行策略。如果是,及时提示风险。

2.3K30

SparkSQL 如何选择 join 策略

三、流程图 绘制了一个流程图来描述 Spark SQL 是如何选择连接策略的: 四、策略选择过程 首先判断是否为等值连接,会进入不同的主流程。...可以被广播的数据集的阈值大小默认是 10M,可以通过 spark.sql.autoBroadcastJoinThreshold 参数来配置,基于 driver 和 executor 端的可用内存。...在 Executor 端,广播的数据集被用作连接的 buildTable,而最初存在于 executor 的数据集,即连接的大,被用作连接的 StreamTable,连接过程中遍历 StreamTable...(3)如果选择 BroadcastHash 策略没有被满足,则判断是否将 Shuffle Sort Merge Join 策略设置为首选,由 spark.sql.join.preferSortMergeJoin...如果在连接查询中指定了连接提示,请根据连接提示选择相应的连接策略。否则,如果数据集的一侧或两侧小到可以广播,则选择Broadcast Nested Loop Join策略并广播较小的数据集。

21910

Spark SQL Catalyst 内部原理 与 RBO

后续将持续更新 Spark SQL 架构 Spark SQL 的整体架构如下图所示 [Spark SQL Catalyst] 从上图可见,无论是直接使用 SQL 语句还是使用 DataFrame,都会经过如下步骤转换成...[Spark SQL Parser] 从上图可见 查询涉及的两张,被解析成了两个 UnresolvedRelation,也即只知道这们是两张,却并不知道它们是 EXTERNAL TABLE 还是 MANAGED...如果能将 Project 下推,在扫描时就只筛选出满足后续操作的最小字段集,则能大大减少 Filter 与 Project 操作的中间结果集数据量,从而极大提高执行速度。...本例中由于 score 数据量较小,Spark 使用了 BroadcastJoin。...因此 score 经过 Filter 后直接使用 BroadcastExchangeExec 将数据广播出去,然后结合广播数据对 people 使用 BroadcastHashJoinExec 进行

1.4K60

数据库分库分中间件 Sharding-JDBC 源码分析 —— SQL 改写

主要涉及两方面: SQL 改写:改写 SQL,解决分库分后,查询结果需要聚合,需要对 SQL 进行调整,例如分页 SQL 生成:生成分分库的执行 SQL SQLRewriteEngine,SQL重写引擎...1.4.x及之前版本,SQL改写是在SQL路由之前完成的,在1.5.x中调整为SQL路由之后,因为SQL改写可以根据路由至单库还是多库而进行进一步优化。 ?...获得 SQL 相关逻辑对应的真实映射,2. 根据映射改写 SQL 相关逻辑为真实。...对 SQL改写 是不是清晰很多了。 ---- 下面我们以笛卡尔积路由结果获得 SQL 相关逻辑对应的真实映射为例子(简单路由结果基本类似而且简单)。...友情提示:这里不嫌啰嗦在提一句,互为 BindingTable 的,配置 TableRule 时, actualTables 数量一定要一致,否则多出来的,可能会无法被路由到。

1.5K60

Spark 3.0如何提高SQL工作负载的性能

催化剂现在停在每个阶段的边界,以根据中间数据上可用的信息尝试并应用其他优化。 因此,可以将AQE定义为Spark Catalyst之上的一层,它将动态修改Spark计划。 有什么缺点吗?...这是启用AQE之前和之后第一个TPC-DS查询的执行结果: 动态将排序合并联接转换为广播联接 当任何联接端的运行时统计信息小于广播哈希联接阈值时,AQE会将排序合并联接转换为广播哈希联接。...spark.sql.adaptive.coalescePartitions.enabled 设置为true ,Spark将根据以下内容合并连续的shuffle分区 设置为spark.sql.adaptive.advisoryPartitionSizeInBytes...因此,倾斜联接优化将使用spark.sql.adaptive.advisoryPartitionSizeInBytes指定的值将分区A0划分为子分区,并将它们中的每一个联接到B的对应分区B0。...然后,在物理级别上,过滤器在维度侧执行一次,结果被广播到主表,在该中也应用了过滤器。

1.4K20

Spark on yarn配置项说明与优化整理

11.spark.sql.shuffle.partitions 800 一个partition对应着一个task,如果数据量过大,可以调整次参数来减少每个task所需消耗的内存. 12.spark.sql.autoBroadcastJoinThreshold...-1 当处理join查询时广播到每个worker的的最大字节数,当设置为-1广播功能将失效。...(不过官网说 tungsten-sort 应用于spark 1.5版本以上) 15.spark.sql.codegen true Spark SQL在每次执行次,先把SQL查询编译JAVA字节码。...针对执行时间长的SQL查询或频繁执行的SQL查询,此配置能加快查询速度,因为它产生特殊的字节码去执行。...true  我们都知道shuffle默认情况下的文件数据为map tasks * reduce tasks,通过设置其为true,可以使spark合并shuffle的中间文件为reduce的tasks

1.1K20

数据库分库分中间件 Sharding-JDBC 源码分析 —— SQL 执行

概述 越过千山万水(SQL 解析、SQL 路由、SQL 改写),我们终于来到了 SQL 执行。开森不开森?! 本文主要分享SQL 执行的过程,不包括结果聚合。...绿框部分 SQL 执行主流程。 ---- 2. ExecutorEngine ExecutorEngine,SQL执行引擎。...分分库,需要执行的 SQL 数量从单条变成了多条,此时有两种方式执行: 串行执行 SQL 并行执行 SQL 前者,编码容易,性能较差,总耗时是多条 SQL 执行时间累加。...后者,编码复杂,性能较好,总耗时约等于执行时间最长的 SQL。 ? ExecutorEngine 当然采用的是后者,并行执行 SQL。...猜测,当SQL 执行是单时,只要进行第一个任务的同步调用,性能更加优秀。等跟张亮大神请教确认原因后,咱会进行更新。

1.1K70
领券