行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https://www.cnblogs.com/hhelibeb/p/10310369.html 测试数据准备 本文的环境是Windows 10, Spark 2.4,开发语言是Python.首先构建一点初始测试数据, from pyspark.sql import SparkSession spark = S…
  Spark SQL中的Catalyst 的工作机制 答:不管是SQL.Hive SQL还是DataFrame.Dataset触发Action Job的时候,都会经过解析变成unresolved的逻辑执行计划,然后利用元数据信息对unresolved的逻辑执行计算进行分析,得到逻辑执行计划,然后对逻辑执行计划进行优化,得到优化后的逻辑执行计划,然后利用优化后的逻辑执行计划生成多个物理执行计划,利用cost model分别对所有的物理执行计划进行测试看看哪个性能更好,然后选出性能最好的物理执行计…
一.窗口函数种类 ranking 排名类 analytic 分析类 aggregate 聚合类 Function Type SQL DataFrame API Description  Ranking  rank   rank rank值可能是不连续的  Ranking  dense_rank  denseRank rank值一定是连续的  Ranking  percent_rank   percentRank 相同的分组中 (rank -1) / ( count(score) - 1 )  R…
首先看个Not in Subquery的SQL: // test_partition1 和 test_partition2为Hive外部分区表 select * from test_partition1 t1 where t1.id not in (select id from test_partition2); 对应的完整的逻辑计划和物理计划为: == Parsed Logical Plan == 'Project [*] +- 'Filter NOT 't1.id IN (list#3 []…
spark sql中支持sechema合并的操作. 直接上官方的代码吧. val sqlContext = new org.apache.spark.sql.SQLContext(sc) // sqlContext from the previous example is used in this example. // This is used to implicitly convert an RDD to a DataFrame. import sqlContext.implicits._…
转载自:https://blog.csdn.net/u012297062/article/details/52227909 UDF: User Defined Function,用户自定义的函数,函数的输入是一条具体的数据记录,实现上讲就是普通的Scala函数:UDAF:User Defined Aggregation Function,用户自定义的聚合函数,函数本身作用于数据集合,能够在聚合操作的基础上进行自定义操作: 实质上讲,例如说UDF会被Spark SQL中的Catalyst封装成为E…
Spark SQL中出现 CROSS JOIN 问题解决 1.问题显示如下所示:     Use the CROSS JOIN syntax to allow cartesian products between these relation 2.原因: Spark 2.x版本中默认不支持笛卡尔积操作 3.解决方案: 通过参数spark.sql.crossJoin.enabled开启,方式如下:   spark.conf.set("spark.sql.crossJoin.enabled"…
spark 2.4 spark sql中执行 set hive.exec.max.dynamic.partitions=10000; 后再执行sql依然会报错: org.apache.hadoop.hive.ql.metadata.HiveException: Number of dynamic partitions created is 1001, which is more than 1000. To solve this try to set hive.exec.max.dynamic.p…
sql中的行转列和列转行的问题 这是一个常见的问题,也是一个考的问题 1.行转列的问题  简单实例 CREATE TABLE #T ( MON1 INT, MON2 INT, MON3 INT ) GO ,,) GO SELECT * FROM #T --行转列:(union all) SELECT MON1 FROM #T UNION ALL SELECT MON2 FROM #T UNION ALL SELECT MON3 FROM #T GO --最后的优化 SELECT * FROM (…
1.小表对大表(broadcast join) 将小表的数据分发到每个节点上,供大表使用.executor存储小表的全部数据,一定程度上牺牲了空间,换取shuffle操作大量的耗时,这在SparkSQL中称作Broadcast Join Broadcast Join的条件有以下几个: *被广播的表需要小于 spark.sql.autoBroadcastJoinThreshold 所配置的值,默认是10M (或者加了broadcast join的hint) *基表不能被广播,比如 left out…