spark
木给哇啦丶
这个作者很懒,什么都没留下…
展开
-
Spark/PySpark中map与flatMap
map将函数作用到数据集的每一个元素上,生成一个新的分布式的数据集(RDD)返回map函数的源码:def map(self, f, preservesPartitioning=False): """ Return a new RDD by applying a function to each element of this RDD. >>> rdd = sc.parallelize(["b", "a", "c"]) >>> s原创 2020-10-10 10:26:04 · 2851 阅读 · 1 评论 -
Hive按特定时间窗口分组求和实例
样例数据: > select * from tmp.lanfz_log;2020-09-14 13:47:12,771 [ForkJoinPool-1-worker-3] INFO cn.jpush.spark.parser.SqlStatisticsParser - queryId : e1a036de-3463-4ab9-a3e9-9ba6e6229227usera lb 2020091410 60 ..原创 2020-09-14 13:57:18 · 1875 阅读 · 0 评论 -
HiveSQL或SparkSQl中group by与grouping sets、with cube和with rollup用法演示
GROUPING SETS: 根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UNION ALL数据准备:建表语句:create table tmp.gb(a string,b string,c int)row format delimited fields terminated by '\t' stored as textfile;案例数据:1 1 12 1 22 2 22 2 32 1 21 2 2使用案例:第一种组合:select原创 2020-09-04 17:35:49 · 1195 阅读 · 1 评论 -
SparkSql MAPJOIN优化之小表left join大表
首先我们要了解MAPJOIN优化原理,这里简要说明下Spark Broadcast hash join(Hive map join同理)1,把小表广播到所有大表分布的节点上,在每个节点上分别进行单机hash join2,left join时只能广播右表执行基本条件:小表必须小于参数spark.sql.autoBroadcastJoinThreshold, 默认为10Msql场景小表需要leftjoin大表 小表150M左右 大表1T左右原始sql(广播...原创 2020-09-03 11:16:52 · 8728 阅读 · 3 评论 -
Spark 3.0 AQE Adaptive Query Execution详解
在Spark 3.0中,AQE框架具有以下三个功能: Dynamically coalescing shuffle partitions (动态整合shufflepartitions数量) Dynamically switching join strategies ( 动态切换连接策略) Dynamically optimizing skew joins( 动态优化倾斜连接) 以下各节将详细讨论这三个功能。Dynamically coalescing shu...原创 2020-08-17 10:43:57 · 1186 阅读 · 0 评论 -
dataframe中head() first() take() collect() show() tail() limit()的关系
first() = head(1) head() 底层调用 take()show() 底层调用的take()多了一层类型转换将值转化为字符串 多了truncate参数,截取字符串功能take() 调用collect() + limit()collect()触发runjob()执行任务tail() 返回dataframe最后一行,可能会OOM方法及源码截图和部分函数描述collect()limit()take()Take the fir...原创 2020-08-06 22:46:40 · 1567 阅读 · 0 评论 -
spark hint中Broadcast Hints、COALESCE and REPARTITION Hints
spark默认的hint只有以下5种COALESCE and REPARTITION Hints(两者区别比较)Spark SQL 2.4 added support forCOALESCEandREPARTITIONhints (usingSQL comments): SELECT /*+ COALESCE(5) */ … SELECT /*+ REPARTITION(3) */ … Broadcast HintsSpark SQL 2.2 supportsBR...原创 2020-08-06 15:14:10 · 1854 阅读 · 1 评论 -
Spark Repartition()与Coalesce()的区别
原数据:Node 1 = 1,2,3Node 2 = 4,5,6Node 3 = 7,8,9Node 4 = 10,11,12coalesce(2)以后Node 1 = 1,2,3 + (10,11,12)Node 3 = 7,8,9 + (4,5,6)原数据:Partition 00000: 1, 2, 3Partition 00001: 4, 5, 6Partition 00002: 7, 8, 9Partition 00003: 10, 11, 12repart...原创 2020-08-06 15:11:00 · 1327 阅读 · 0 评论 -
什么是 RDD ?
Spark 中最基本的数据抽象是 RDD。RDD:弹性分布式数据集 (Resilient Distributed DataSet)。1,RDD 有三个基本特性这三个特性分别为:分区,不可变,并行操作。a, 分区每一个 RDD 包含的数据被存储在系统的不同节点上。逻辑上我们可以将 RDD 理解成一个大的数组,数组中的每个元素就代表一个分区 (Partition) 。在物理存储中,每个分区指向一个存储在内存或者硬盘中的数据块 (Block) ,其实这个数据块就是每个 task 计算出的数原创 2020-07-20 22:34:15 · 377 阅读 · 0 评论 -
io.netty.util.internal.OutOfDirectMemoryError
spark.maxRemoteBlockSizeFetchToMem(默认512m) 当远程块的大小以字节计超过此阈值时,将获取到磁盘。这是为了避免占用太多内存的巨大请求。默认情况下,这只对> 2GB的块启用,因为无论有什么资源可用,这些块都不能直接提取到内存中。但是,它可以被降低到一个更低的价值。以避免在较小的块上使用太多的内存。注意,此配置将影响洗牌获取和块管理器远程块获取。对于启用外部shuffle服务的用户,此功能只能在外部使用要求:spark.shuffle.servi...原创 2020-07-20 11:57:01 · 5392 阅读 · 0 评论 -
spark.maxRemoteBlockSizeFetchToMem参数介绍
spark.maxRemoteBlockSizeFetchToMem(默认512m) 当远程块的大小以字节计超过此阈值时,将获取到磁盘。这是为了避免占用太多内存的巨大请求。默认情况下,这只对> 2GB的块启用,因为无论有什么资源可用,这些块都不能直接提取到内存中。但是,它可以被降低到一个更低的价值。以避免在较小的块上使用太多的内存。注意,此配置将影响洗牌获取和块管理器远程块获取。对于启用外部shuffle服务的用户,此功能只能在外部使用要求:spark.shuffle.servi...原创 2020-07-15 17:42:30 · 3281 阅读 · 0 评论 -
python pool多线程SparkSession无法共享异常解决
错误写法,此种写法会导致SparkSession无法共享异常from multiprocessing import Poolfrom pyspark import SparkConffrom pyspark.sql import SparkSessionos.environ["PYSPARK_PYTHON"] = "/usr/local/anaconda3/bin/python3.6"os.environ["PYSPARK_DRIVER_PYTHON"] = "/usr/local/anac原创 2020-07-02 22:15:46 · 552 阅读 · 0 评论 -
python线程池ThreadPoolExecutor使用案例
# -*- coding: utf-8 -*-from concurrent.futures import waitfrom concurrent.futures import ALL_COMPLETED, ThreadPoolExecutorfrom pyspark import SparkConf, SparkContextfrom pyspark.sql import HiveContextconf = SparkConf()conf.set("spark.yarn.queue"...原创 2020-07-02 22:07:21 · 814 阅读 · 0 评论 -
pyspark、hive和dateframe临时udf使用案例
背景 在我们数据开发过程中业务中有很多计算时间差值的场景,公司业务数据时间格式基本是:yyyyMMdd,,而spark或者hive提供内置函数datediff(),需要传入的时间参数格式:yyyy-MM-dd,为开发时简化代码量与代码可读性,我们通过创建临时udf可以灵活的解决该问题。pyspark import time def dd_datediff(date_now, date_ago, date_type="day"): date_now = time...原创 2020-07-02 22:03:38 · 402 阅读 · 0 评论 -
pyspark读取指定分隔符文件,dataframe与csv互转
dataframe转csv,并将文件保存至HDFS,然后下载到本地dfResult = spark.sql("select * from tmp.lanfz_dirty_imei")dfResult.write.format("csv").option("header","true").mode("overwrite").save("/user/lanfz/dirty_imei/")注意:结果目录可能会产生多个文件提供以下两种方式合并文件,并获取到本地方式一(适用较大数据量)dfR.原创 2020-06-28 21:54:40 · 3112 阅读 · 2 评论 -
PySpark UDF使用详解及代码示例
案例一在hive或spark计算中需要注意两数之和或之差如果其中有一个为null,那么结果等于null,所以提供以下udf自定义函数求两数之和def diy_add(a, b):r = Noneif a is None:if b is None:return relse:return belse:if b is None:return...原创 2020-06-22 20:54:19 · 1569 阅读 · 0 评论 -
spark dataframe中createOrReplaceTempView()和cache()
它们都是为了快速访问数据集。两者有什么区别? createOrReplaceTempView将一个DataFrame表注册为一个表,您可以使用SQL查询该表(绑定到注册该表的生命周期SparkSession-因此Temp是名称的一部分)。但是请注意,此方法不允许您实现任何性能改进。 cache(或persist)标记DataFrame在执行以下操作后要缓存的内容,从而可以在后续操作中更快地进行访问。DataFrame就像RDD一样,表示对基础(分布式)数据结构(血缘关...原创 2020-06-18 21:45:47 · 7674 阅读 · 0 评论 -
Spark参数spark.executor.memoryOverhead与spark.memory.offHeap.size的区别
最近疑惑一个问题,sparkexecutor的堆外内存问题,堆外内存很好理解,这里不再解释,疑惑的是它的设置,看过官网就知道设置堆外内存的参数为spark.executor.memoryOverhead与spark.memory.offHeap.size(需要与 spark.memory.offHeap.enabled同时使用),其中这两个都是描述堆外内存的,但是它们有什么区别么?因为对两个参数不是很理解,所以我在集群上找了个任务,对这两个参数进行研究。我是通过storage...原创 2020-06-11 22:11:31 · 22150 阅读 · 8 评论 -
PySpark中UDF函数使用
Pyspark内置函数有时不能解决全部需求,这时需要我们写一些udf来解决实际业务,Pyspark中提供了此种方法,脚本中导入 from pyspark.sql import functions as F便可轻松实现,我这里是解决经纬问题,写的一个udf示例。(部分代码已省略)#!/usr/bin/python3.6# -*- coding: utf-8 -*-from pyspark.sql import functions as Ffrom pyspark.sql...原创 2020-06-06 15:37:54 · 2328 阅读 · 0 评论 -
Spark中Executor、Task、Stage、Job的关系
Spark重点关键字官方文档入口: http://spark.apache.org/docs/latest/cluster-overview.html Application 基于Spark的用户程序。由集群上的Driver program和Executor组成。 Application jar 一个包含用户的Spark应用程序的jar。在某些情况下,用户将希望创建一个包含其应用程序及其依赖项的“uberjar”。...原创 2020-06-04 22:31:22 · 4796 阅读 · 0 评论 -
RDD的map和flatMap操作
RDD的map() 接收一个函数,把这个函数用于 RDD 中的每个元素,将函数的返回结果作为结果RDD 中对应元素的结果。flatMap()对RDD每个输入元素生成多个输出元素,和 map() 类似,我们提供给 flatMap() 的函数被分别应用到了输入 RDD 的每个元素上。不 过返回的不是一个元素,而是一个返回值序列的迭代器。输出的 RDD 倒不是由迭代器组 成的。我们得到的是一个包含各个迭代器可访问的所有元素的 RDD。import sysfrom pyspark impor...原创 2020-06-04 21:35:49 · 1909 阅读 · 0 评论 -
Spark Executor 内存管理
本文主要对 Executor 的内存管理进行分析,下文中的 Spark 内存均特指 Executor 的内存堆内内存和堆外内存作为一个 JVM 进程,Executor 的内存管理建立在 JVM 的内存管理之上,此外spark还引入了堆外内存(不在JVM中的内存),在spark中是指不属于该executor的内存。堆内内存:由 JVM 控制,由GC(垃圾回收)进行内存回收,堆内内存的大小,由 Spark 应用程序启动时的 executor-memory 或 spark.executo...原创 2020-06-04 21:23:06 · 2468 阅读 · 0 评论 -
MapReduce与Spark On Yarn资源竞争时,为何Spark总能抢占更多资源?
问题简述:我们日常开发中,有时会在yarn队列中发现一个现象,spark任务跑得很舒服,而且占了很多资源,MR任务拿不到资源一直卡在那里,提交MR的同事就很气,抱怨spark抢占资源,实际真的是这样么?我们针对这个问题进行以下探究。常见现象如下,资源紧张时比较常见,看如图中的Spark任务持有的Container普遍多于MR任务持有的Container有的小伙伴可能没有耐心,咱们先给下结论!!!(文章结尾还有提升竞争力优化思路)不是的,并不是Spark抢占资源,而是MR和Spark模型决定的。原创 2020-05-26 23:09:12 · 796 阅读 · 0 评论 -
sc.TextFile() 函数提交多个File
在写 Spark 程序时,如果数据源分散在不同位置,则需要在 sc.TextFile 的时候指定多个数据源我们可能会想到的一种错误写法是:错误写法:sc.TextFile( filename1, filename2, filename3)经过试验发现,如果按照这种写法,在运行 Spark 的时候会报错退出,通过 applicationId 从 yarn logs 下载日志后,Traceback 找到 sc.textFile( ) 报错,错误提示没有这种方法,如下所示:Log 中显示 sc原创 2020-05-25 21:33:52 · 3830 阅读 · 0 评论 -
Spark DataFrame中的join类型inner join, left join, right join, full join
Spark DataFrame中join与SQL很像,都有inner join, left join, right join, full join那么join方法如何实现不同的join类型呢?看其原型def join(right : DataFrame, usingColumns : Seq[String], joinType : String) : DataFramedef j...原创 2020-04-20 22:52:32 · 3141 阅读 · 0 评论