Spark
Lestat.Z.
lestatzhang.com
展开
-
spark动态资源分配参数一览
属性 默认值 含义 自版本 spark.dynamicAllocation.enabled false 是否使用动态资源分配,该资源分配将根据工作负载上下扩展在此应用程序中注册的执行程序的数量。 这需要设置spark.shuffle.service.enabled或spark.dynamicAllocation.shuffleTracking.enabled。 以下配置也相关:spark.dynamicAllocation.minExecutors,spa.原创 2020-07-14 16:03:07 · 2300 阅读 · 0 评论 -
Spark Dynamic Resource Allocation动态资源分配
动态资源分配Spark提供了一种机制,可以根据工作负载动态调整应用程序占用的资源。 这意味着,如果不再使用资源,应用程序可以将资源返还给群集,并在以后有需求时再次请求它们。 如果多个应用程序共享您的Spark集群中的资源,则此功能特别有用。默认情况下,此功能是禁用的,并且在各种类型的集群管理器中都可使用用。资源分配政策从较高的层次上讲,Spark应该在不再使用executor时将其放弃,并在需要它们时获取他们。由于没有确定的方法可以预测即将被删除的执行程序是否将在不久的将来运行任务,或者即将被添加的原创 2020-07-14 15:46:09 · 858 阅读 · 0 评论 -
Spark中对dataframe内重复列求和
前言在处理dataframe中的字段名是,发现有些字段名在处理后是重复,于是新定义了策略,对这些相同列名的字段进行求和合并summing the duplicated columns代码实现#Hanle Duplicatesfrom operator import addfrom functools import reduceimport collectionsoriginal_columns = [...]columns_after_cleanup=[...]counter=colle原创 2020-06-08 11:19:55 · 2252 阅读 · 0 评论 -
spark中递归join一系列dataframe
代码如下:def join_dfs(df_list,key=['id']): if len(df_list) == 1: retirm df_list[0] def join_df(df1,df2,key=['id']): return df1.join(df2, key) return reduce(join_df, df_list)def join_df_recursive(df_list, key=['id']): len_df = len(df_list) if len_df原创 2020-05-21 13:14:12 · 1034 阅读 · 0 评论 -
注意pyspark中替换nan值的问题
在PySpark中,NaN与Null不同。 两者都与空字符串“”不同,因此,可能需要在所有数据集特定填充值的基础上检查每个字符。本来想使用df.replace(float('nan'),None)将dataframe中的 nan 值全部转化为空,但是测试下来发现,这个函数在spark中除了会将 nan替换掉,还会将 0 也替换成空(此处是int(0),0.0不受影响),因此,要注意。最后,还是建议用isnan来判断然后替换:import pyspark.sql.functions as Fdf .原创 2020-05-21 09:42:18 · 2536 阅读 · 0 评论 -
pyspark中获取dataframe的大小
代码如下:from pyspark.serializers import PickleSerializer, AutoBatchedSerializerdef _to_java_obj_rdd(df): rdd=df.rdd._reserialise(AutoBatchedSerializer(PickleSerializer())) return rdd.ctx._jvm.org.apache.spark.mllib.api.python.Serde.pythonToJava(rdd._jrdd原创 2020-05-19 19:40:42 · 5783 阅读 · 0 评论 -
记一个FPGrowth的简单例子
前言Frequent Pattern Mining挖掘频繁项目,项目集,子序列或其他子结构通常是分析大规模数据集的第一步,这是数据挖掘多年来一直活跃的研究课题。这也是关联规则挖掘的常用算法之一。关联规则中的一些基本概念关联规则:用于表示数据内隐含的关联性,一般用X表示先决条件,Y表示关联结果。支持度(Support):所有项集中{X,Y}出现的可能性。置信度(Confide...原创 2019-05-09 21:15:53 · 3475 阅读 · 0 评论 -
关于Spark UI中的Event Timeline
关于Event Timeline下面举个简单的例子,例如下图:现在这很有趣。 我们看到基本都是红色和蓝色,也就是大部分时间花在了Scheduler Delay和Task Deserialization Time上 而我们真正想要看到的是很多绿色 —— Executor Computing Time的比例,就是executor真正执行工作所花的时间。Scheduler Delay(蓝色部分)...原创 2019-05-19 10:15:22 · 2335 阅读 · 0 评论 -
如何在提交spark程序之后退出spark-submit
前言有时候需要在将spark程序提交到集群之后,退出spark-submit进程,那么该如果实现呢?解决方法方法很简单,可以通过在使用spark-submit时设置--conf spark.yarn.submit.waitAppCompletion = false来实现。 这样,客户端将在成功提交spark程序申请后将会自动退出。在集群模式下,Spark驱动程序在Application ...原创 2019-05-08 22:06:46 · 6126 阅读 · 0 评论 -
关于Spark中的Partitioner
关于Spark中的Partitioner前言分区器PartitionerHashPartitionerRangePartitionerCustomPartitioner参考资料:前言分区只不过是将原来大的数据分成几部分。 比如分布式系统中的分区,我们可以将其定义为大型数据集的分区,并将它们存储为整个群集中的多个部分。通过分区可以减少网络I/O,从而可以更快地处理数据。在Spark中,co-g...原创 2019-05-05 21:41:56 · 2775 阅读 · 0 评论 -
关于org.apache.spark.deploy.SparkSubmitArguments
关于org.apache.spark.deploy.SparkSubmitArguments前言主要逻辑主要方法mergeDefaultSparkPropertiesignoreNonSparkPropertiesloadEnvironmentArgumentsvalidateArgumentsvalidateSubmitArgumentsvalidateKillArgumentsvalidate...原创 2019-05-05 18:34:06 · 881 阅读 · 0 评论 -
关于org.apache.spark.deploy.yarn.Client类
关于org.apache.spark.deploy.yarn.Client类前言主要方法submitApplicationcreateApplicationSubmissionContextsetupSecurityTokengetApplicationReportgetClientTokenverifyClusterResourcescopyFileToRemoteprepareLocalRes...原创 2019-05-05 12:46:30 · 2669 阅读 · 0 评论 -
如何在pyspark中处理多余空格 —— regex_replace/trim
我们在做数据清洗时经常用和一些多余无用的空格打交道,例如移除开头和末尾的空格,或将多个连续空格替换成一个等。以下提供几个在pypark中处理字段中多余空格的例子。import pyspark.sql.functions as Ffrom pyspark.sql.functions import coldef single_space(col): return F.trim(F.reg...原创 2019-04-29 09:50:47 · 4318 阅读 · 0 评论 -
PySpark与Java/Scala交互中的一些常用的Spark对象
一些常用的Spark对象前言一些常用的Spark对象SparkContextSQLContextRDDSDataFrames参考资料前言在PySpark中调用Scala/Java代码时,我们会遇到一些负载的对象需要传递,例如一些spark对象。在环境之间(Python / Java)传递时,我们必须将Spark对象显式地包装/提取到java对象中。下面是一些常用的Spark对象。一些常用的...原创 2019-05-04 11:02:18 · 775 阅读 · 0 评论 -
如何在PySpark中调用Scala/Java代码
前言虽然有充分的理由使用Python API开发Spark应用程序,但不可否认的是Scala是Spark的原生语言,有一些功能或第三方库并没有直接提供python版本。那么当我们想要使用一些PySpark不支持的功能,或者只是想在Python应用程序中使用Scala库该怎么办呢?下面的示例展示了如何在PySpark应用程序中调用Scala代码。示例Pyspark在解释器和JVM之间建立了...原创 2019-05-04 10:57:41 · 2396 阅读 · 1 评论 -
如何在python(pyspark)中调用Scala或Java编写的UDF
前言启动Python进程的开销不小[1],但是真正的开销在于将数据序列化到Python中。推荐在Spark中定义UDF时首选Scala或Java,即使UDFs是用Scala/Java编写的,不用担心,我们依然可以在python(pyspark)中使用它们,简单示例如下://My_Upper UDFpackage com.test.spark.udfimport org.apache.sp...原创 2019-05-04 10:23:58 · 4200 阅读 · 0 评论 -
如何限制Spark作业失败的重试次数?
前言最近有个spark程序因为资源不足以及其他原因会在第一次提交时候失败,然后又会不断提交,导致过多的系统资源被无效占用。因此想限制Spark作业失败的重试次数,如果第一次失败,就让作业直接失败,那么该具体该如何实现呢?解决方法首先查看了spark的属性配置,发现我们使用spark.yarn.maxAppAttempts属性在提交程序时限制其重试次数,如:spark-submit --co...原创 2019-05-11 12:41:03 · 14443 阅读 · 0 评论 -
关于spark yarn模式下的常用属性
前言整理了spark官网提供的一些常用的spark属性。Spark属性属性名默认值描述spark.yarn.am.memory512m在Client模式下用于YARN Application Master的内存量,格式与JVM内存字符串相同(例如512m,2g)。在Cluster模式下,请改用spark.driver.memory。使用小写后缀,例如 k,m,g,t和...原创 2019-05-11 13:18:17 · 3424 阅读 · 0 评论 -
如何打印Spark作业的GC详情
问题描述有时候在Spark故障排除的时,我们需要查看gc回收的的各项统计指标。那么如何打印Spark作业的GC详情呢?常见GC详情收集方法收集executor端的GC详情在提交作业,可以加入如下参数 --conf "spark.executor.extraJavaOptions=-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStam...原创 2019-07-18 09:26:24 · 786 阅读 · 0 评论 -
关于Spark Steaming中的Processing Time/Total Delay/Processing Delay
名词解释Processing Time端到端计算所有作业的给定批次所需的时间。Scheduling Delay从该批次被提交到流式调度程序的时间开始到处理该批次的第一个作业所花费的时间。。Total Delay该批次的所有作业从提交时起完成处理所需的时间,等于 Scheduling Delay + Processing Time 。 如果我们落后5秒,意味着我...原创 2019-07-15 21:35:26 · 1992 阅读 · 0 评论 -
SparkUI Details of Stage中与task相关的摘要指标含义
Summary Metrics for Completed Tasks in Stage指标含义DurationexecutorRunTime,执行程序的时间的运行时间Scheduler Delay包括将任务从调度程序发送到执行程序的时间,以及将任务结果从执行程序发送到调度程序的时间。Task Deserialization TimeexecutorDese...原创 2019-05-18 19:37:08 · 2146 阅读 · 0 评论 -
关于org.apache.spark.sql.Row
关于org.apache.spark.sql.Row前言构造Row解析Row的值按索引进行字段访问 —— apply和get方法指定类型来获取字段 —— getAs方法Row与SchemaRow与匹配模式参考资料前言Row表示关系运算符的一行输出。 它是一个通用行对象,具有有序的字段集合,可以通过序数/索引(通过序数进行通用访问,generic access by ordinal),字段名(也...原创 2019-05-23 10:23:05 · 6174 阅读 · 1 评论 -
Spark中将RDD转换成DataFrame的两种方法
总结下Spark中将RDD转换成DataFrame的两种方法, 代码如下:方法一: 使用createDataFrame方法//StructType and convert RDD to DataFrame val schema = StructType( Seq( StructField("name",StringType,true) ...原创 2019-05-17 21:37:53 · 9106 阅读 · 0 评论 -
关于Spark中RDD对象无法调用toDF的解决方法
前言今天在调试一个Scala程序时,IDEA报了can not resolve symbol toDF的错误, 查看了一下代码, 该行的逻辑是将RDD转成DataFrame,看起来似乎很正常, 但就是没有办法调用toDF方法,查看了一下上下文,原来是在代码重构的时候,不小心的将import sqlContext.implicits._给移除了。解决方法如果使用的是spark 2.0之前的版本...原创 2019-05-17 21:35:37 · 10721 阅读 · 0 评论 -
unable to find encoder for type stored in a dataset的解决方法
前言一般来说,在我们将数据读到DataFrame之后,会继续使用其他一些算子进行处理,如map,flatMap等,但是如果你直接对其调用这些算子时,可能会出现类似unable to find encoder for type stored in a dataset的错误,这种错误的产生一般是因为该DataFrame中的某些返回值的类型不能通过spark自身的的反射完成自动编码,如Map类型,它不...原创 2019-05-22 18:00:45 · 2978 阅读 · 0 评论 -
关于FPGrowth.FreqItemset中的WrappedArray的处理方法
一般我们可以用如下代码使用FPGrowthimport org.apache.spark.ml.fpm.FPGrowthval dataset = spark.createDataset(Seq( "1 2 5", "1 2 3 5", "1 2")).map(t => t.split(" ")).toDF("items")val fpgrowth = new FPG...原创 2019-05-22 17:40:50 · 938 阅读 · 0 评论 -
java.lang.AssertionError: assertion failed: No plan for HiveTableRelation的解决方法
前言在使用pyspark跑sparksql的时候出现了类似如下的错误:java.lang.AssertionError: assertion failed: No plan for HiveTableRelation ....一般来说这种错误的产生是因为在创建SparkSession对象的时候HiveContext没有被启用。查了一下代码, 果不其然:#In pythonspark ...原创 2019-05-13 16:18:13 · 5513 阅读 · 3 评论 -
Spark yarn模式下的资源分配配置
Spark on YARN模式下的资源分配配置前言Spark on Yarn中的两种部署模式关于Application Master (AM)的配置yarn-clientyarn-cluster关于Spark执行程序的容器关键要点参考资料前言Spark on YARN模式下的主要资源为CPU和内存。Spark资源分配配置在spark-defaults.conf中设置,其属性配置一般以 ***...原创 2019-05-11 21:14:37 · 1281 阅读 · 0 评论 -
如何在pyspark中与HDFS交互
如何pyspark与HDFS交互前言使用Java Gateway使用第三方库使用subprocesses子进程参考资料前言我们经常需要从Spark应用程序执行HDFS操作,无论是在HDFS中列出文件还是删除数据。如果使用scala写spark程序的话,我们可以调用hadoop相关的jar包对hdfs进行操作,但在Python Spark API(PySpark)并不能立即实现这一点,那么在p...原创 2019-05-04 10:04:50 · 2818 阅读 · 0 评论 -
org.apache.spark.sql.RuntimeConfig vs org.apache.spark.SparkConf
org.apache.spark.SparkConfSpark应用程序的配置。 用于将各种Spark参数设置为键值对。大多数情况下,你可以使用new SparkConf()创建一个SparkConf对象,该对象将会从Java系统属性中载入所有spark.*的配置。在这种情况下,你直接在SparkConf对象上所设置的参数优先于系统属性。我们可以通过以下代码来访问它的配置:scala>...原创 2019-05-02 22:46:50 · 1177 阅读 · 0 评论 -
Spark结构化API的执行过程——Logical Plan & Physical Plan
执行的基本步骤简单来说,Spark 对代码中Structured API的执行主要有以下几个步骤:(用户) 编写DataFrame/Dataset/SQL 代码如果代码没有错误,Spark会将这些代码转换成逻辑计划(Logical Plan)Spark将生成的逻辑计划记过一系列优化,转换为物理计划(Physical Plan)Spark执行物理计划,即在集群上对RDD进行一系列操作。...原创 2019-03-21 10:34:54 · 3915 阅读 · 0 评论 -
为什么建议在Spark中使用Scala定义UDF
虽然在Pyspark中,驱动程序是一个python进程,但是它创建的SparkSession对象以及其他DataFrames或者RDDs等都是利用Python封装过的 JVM对象 。简单地说,虽然控制程序是Python,但它实际上是python代码告诉集群上的分布式Scala程序该做什么。 数据存储在JVM的内存中,并由Scala代码进行转换。将这些对象从JVM内存中取出并将它们转换为Pytho...原创 2019-03-19 15:36:37 · 5783 阅读 · 3 评论 -
spark.sql.shuffle.partitions 和 spark.default.parallelism 的区别
在关于spark任务并行度的设置中,有两个参数我们会经常遇到,spark.sql.shuffle.partitions 和 spark.default.parallelism, 那么这两个参数到底有什么区别的?首先,让我们来看下它们的定义Property NameDefaultMeaningspark.sql.shuffle.partitions200Configure...原创 2019-02-27 10:30:03 · 22415 阅读 · 0 评论 -
Spark Shuffle
文章目录Spark ShuffleShuffle的优化参考资料Spark ShuffleShuffling是一个分布在不同分区数据进行重新分配(重新分区)的过程。这个分配过程可能会引起数据在不同JVM进程或者集群的不同节点间移动。Shuffling是在不同stage之间进行数据传输的过程提示为了避免shuffle产生的开销,应该尽量使用现有分区进行操作,利用部分聚合来减少数据传输。可...原创 2019-02-26 15:19:24 · 2874 阅读 · 0 评论 -
spark-submit使用yarn cluster模式时如何获取applicationId?
文章目录问题描述什么是applicationId解决方法问题描述在自动化的项目中,需要将spark-submit程序包装起来,通过c语言或者shell来调用,因为需要记录日志,即需要知道每次提交的spark的程序的applicationId, 将其记录。spark程序是使用yarn cluster模式提交的,因此driver在集群中的任意机子,无法确定。什么是applicationIdap...原创 2019-03-01 20:14:36 · 5362 阅读 · 0 评论 -
Spark中RDD、DataFrame和DataSet的区别
文章目录前言RDD、DataFrame和DataSet的定义RDD、DataFrame和DataSet的比较Spark版本数据表示形式数据格式编译时类型安全序列化垃圾回收效率/内存使用编程语言支持聚合操作(Aggregation)结论前言最近同事开始学习使用Spark,问我RDD、DataFrame和DataSet之间有什么区别,以及生产环境中的spark1.6将在不久后被移除,全部使用spa...原创 2019-03-01 15:50:21 · 4616 阅读 · 4 评论 -
如何为Spark应用程序分配--num-executors,--execuor-cores和--executor-memory
前言在我们提交spark程序时,应该如何为Spark集群配置–num-executors, - executor-memory和–execuor-cores 呢?一些资源参数设置的基本知识Hadoop / Yarn / OS Deamons当我们使用像Yarn这样的集群管理器运行spark应用程序时,会有几个守护进程在后台运行,如NameNode,Secondary NameNode,...原创 2019-03-01 13:47:16 · 11044 阅读 · 1 评论 -
一些常用的Spark SQL调优技巧
文章目录一些常用的Spark SQL调优技巧一些常用的Spark SQL调优技巧使用缓存表在sparksql中,当我们创建表时,我们可以通过调用spark.catalog.cacheTable("tableName") 或者 dataFrame.cache()的方式将表缓存起来。这样Spark SQL将仅扫描所需的列,并自动调整压缩以最小化内存使用和GC压力。当你不需要缓存时,可以通过...原创 2019-03-01 12:49:12 · 4360 阅读 · 0 评论 -
[Spark学习] Spark RDD详解
文章目录什么是RDDRDD的主要属性RDD的组成RDD的分区RDD的依赖关系窄依赖(Narrow Dependency)宽依赖(Wide Dependency)什么是RDDRDD(Resilient Distributed Datasets),弹性分布式数据集,是Spark的基本数据结构。它是一个不可变的分布式对象集合。RDD中的每个数据集被划分为逻辑分区,其可以在集群的不同节点上计算。...原创 2019-02-25 14:41:50 · 433 阅读 · 0 评论 -
[Spark笔记]Spark Streaming连接Kafka的入门代码
用scala写的一段Spark Streaming连接Kafka的入门代码import kafka.serializer.StringDecoderimport org.apache.log4j.Loggerimport org.apache.spark.SparkConfimport org.apache.spark.streaming.{Seconds, StreamingContex...原创 2019-02-23 17:17:34 · 508 阅读 · 0 评论