海洋 之心
图神经网络-大数据-推荐系统研究者,专注于计算机领域前沿技术的分享等人工智能算法研究工作
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spark读取MySQL数据JDBC方式
通过本文,我们学习了如何使用 Spark 通过 JDBC 连接到 MySQL 数据库,并进行数据的读取。这种方式除了适用于 MySQL,也同样适用于其他支持 JDBC 的关系数据库。然而,本文仅作为入门示例,真实世界中可能需要处理更多高级的用例和优化。例如,分布式读取、连接池管理、故障转移等。希望本文能帮助你更好地理解 Spark 和 JDBC 的结合使用,欢迎分享和评论。原创 2023-09-02 14:44:58 · 337 阅读 · 0 评论 -
Spark自定义函数UDF
有些时候我们一些需求无法通过系统内置函数完成,我们需要将我们的实现逻辑封装成函数进行调用,在MySQL或者Hive中都可以实现,其实在Spark中也是可以的。下面我们举个例子,我们有个DataFrame,我们想将Fruit这一列的值前面加个前缀Fruit该函数接收一个参数,然后返回值是在该值的前面加上Fruit效果和上面是一样的。原创 2023-09-02 10:24:19 · 169 阅读 · 0 评论 -
Exception in thread “main“ org.apache.spark.sql.AnalysisException: Table or view not found: df; line
编写Spark程序在调用自定义函数时出现如下问题 `Exception in thread "main" org.apache.spark.sql.AnalysisException: Table or view not found: df; line 1 pos 30;'Project [unresolvedalias('myFunction('Fruit), None)]+- 'UnresolvedRelation [df]`原创 2023-09-02 10:12:36 · 819 阅读 · 0 评论 -
Spark将DataFrame转RDD
在 Apache Spark 中,RDD(Resilient Distributed Datasets)、DataFrame 和 DataSet 是三种主要的数据结构。这些数据结构之间可以互相转换,本文将介绍如何将DataFrame转RDD。首先我们需要创建上下文对象,以及进行一些简单配置,这样才能够开发我们的。这里我们首先创建了一个配置对象,然后根据配置对象创建一个。由于DataFrame属于RDD的高级封装,所以直接调用。这个方法即可获得对应的RDD。对象,方便下文进行操作。原创 2023-09-02 09:37:32 · 297 阅读 · 0 评论 -
Spark将RDD转DataFrame
在 Apache Spark 中,RDD(Resilient Distributed Datasets)、DataFrame 和 DataSet 是三种主要的数据结构。这些数据结构之间可以互相转换,本文将介绍如何将RDD转为DataFrame。首先我们需要创建上下文对象,以及进行一些简单配置,这样才能够开发我们的。这里我们首先创建了一个配置对象,然后根据配置对象创建一个。时,参数需要指定列名,如果有更多列同理。其次还要注意一点就是如果我们需要在。对象,方便下文进行操作。原创 2023-09-02 09:32:07 · 203 阅读 · 0 评论 -
Spark中广播变量原理详解
这意味着,如果一个大的数据集被用在多个Spark任务中,那么这个数据集的多个副本将会被发送到集群中的各个节点,这样可能会导致大量的网络传输。综上所述,虽然在某种程度上,使用广播变量和使用普通RDD都涉及到数据的网络传输,但广播变量能显著减少网络和计算的开销,特别是在一个小数据集需要与一个大规模的RDD进行多次交互时。如果一个小数据集作为普通RDD与一个大RDD进行操作(比如join),小RDD的数据可能会被发送到集群中的多个节点多次,因为每个分区的计算可能在不同的节点上执行。这会增加计算的复杂性和开销。原创 2023-08-19 17:39:48 · 730 阅读 · 1 评论 -
Spark自定义累加器Accumulator
在Spark中,除了系统提供的累加器(例如和)之外,我们还可以创建自定义累加器。自定义累加器允许我们以分布式和高效的方式累加复杂类型的数据。定义累加器的类型定义累加器将累加的数据类型。这可以是任何类型,例如整数、浮点数、集合等。继承 AccumulatorV2创建一个新类,继承自,并为其指定输入类型(IN)和输出类型(OUT)。实现必须的方法抽象类定义了一组需要被子类实现的方法。sum = 0count = 0count += 1newAccaverage在这个例子中,原创 2023-08-19 16:14:48 · 506 阅读 · 0 评论 -
Spark自定义分区器
在Spark中,分区器是用于决定RDD的分区方式的对象。默认情况下,Spark中键值对RDD的分区方式是基于键的哈希值,但在某些情况下,你可能希望按照自定义的方式来决定分区。这时候,你可以实现一个自定义分区器。当我们运行这个程序,它将输出每个分区的数据项,你会发现所有学生ID为偶数的数据都在分区0,奇数的则在分区1。假设我们有一组(学生ID, 分数)的数据,我们想要根据学生ID的奇偶性将数据分到两个不同的分区中。方法返回我们想要的分区数(在这个例子中是2),这样,我们便实现了一个简单的自定义分区器。原创 2023-08-19 15:54:32 · 297 阅读 · 0 评论 -
Spark中cache、persist、checkPoints函数区别详解
请注意,选择何种方式来处理RDD,取决于具体的应用场景和资源状况。例如,在需要高容错性和数据在跨job中共享的场景下,可能会倾向于使用。而在追求计算性能和资源优化的场景下,可能会使用。原创 2023-08-19 15:24:57 · 324 阅读 · 0 评论 -
Spark设置检查点checkPoints函数详解
在Spark中,`checkpoint`是一种将RDD的计算结果保存到可靠的分布式文件系统(例如HDFS)中的技术。一旦RDD的数据被checkpointed,其依赖于父RDDs的线路图(lineage)会被切断,也就是说Spark会从checkpoint的数据中重新读取数据,而不再依赖于原始父RDDs。这样做的主要目的是通过削减计算图的依赖,达到减轻长线路图带来的容错压力,从而提升计算效率。原创 2023-08-19 15:17:32 · 207 阅读 · 0 评论 -
Spark中cache和persist函数区别详解
cache()存储级别默认为可以选择不同的存储级别使用场景想要使用默认存储级别持久化 RDD 时需要根据资源和性能需求选择不同存储级别时灵活性较低(使用默认的存储级别)高(可以选择不同的存储级别)简单来说,cache()是一种简化的持久化方式,适合于需要快速、简单持久化的场景。而persist()提供了更大的灵活性,允许开发者根据具体的需求选择不同的存储级别。原创 2023-08-19 10:42:58 · 487 阅读 · 0 评论 -
Spark中持久化persist算子详解介绍
在“Storage”选项卡中,可以查看每个持久化的 RDD 的详细信息,包括它们的存储级别、缓存状态、分区数、内存占用情况等。不合理的持久化策略可能会导致过多的内存占用,而不持久化可能导致重复的、代价昂贵的计算。方法用于将 RDD 的计算结果保存到内存或其他存储设备中,以便在后续的计算中重复使用,从而避免了重复计算的开销。以上存储级别可以在创建时选择是否进行副本存储(即数据冗余),以便在某些节点出现故障时保证数据的可用性。Spark 提供了不同的存储级别,允许用户根据具体需求选择不同的持久化策略。原创 2023-08-19 10:39:38 · 588 阅读 · 0 评论 -
Spark中持久化cache算子详解介绍
函数用于将RDD或Dataset的计算结果存储在集群的内存中,以便于后续的操作可以重用这些数据,而不需要重新计算。这大大提高了迭代计算的效率,特别是对于迭代算法和重复数据访问的场景。这可能意味着改变你的工作流,以便在缓存之前过滤掉不需要的数据。如果你的工作负载真的需要大量的缓存,并且优化工作流以减少缓存的大小不可行,那么增加集群的内存是一个明智的选择。通过上述策略和选项的合理组合和应用,可以更灵活地管理Spark作业的内存使用,减缓或解决内存不足的问题。使用更紧凑的数据结构,这可以减少每条记录的内存占用。原创 2023-08-19 10:32:05 · 437 阅读 · 0 评论 -
Spark中join算子详解介绍
在Spark中,`join`操作是一个非常常用的操作,它用于将两个RDD或DataFrame/DataSet根据某个或某些共同的键(key)进行连接。这里,我将详细解释Scala版本的Spark RDD和DataFrame的`join`操作。原创 2023-08-19 10:26:12 · 337 阅读 · 0 评论 -
Spark中Executor、Task和Container之间的关系
在Spark中,一个节点可以有一个或多个Executor,Executor、Task和Container之间的关系原创 2023-08-19 10:10:34 · 1014 阅读 · 0 评论 -
Spark在YARN中两种部署模式
在Spark运行在YARN、Mesos或Kubernetes这样的集群管理器上时,可以选择两种不同的部署模式:客户端模式(Client Mode)和集群模式(Cluster Mode)。下面详细描述这两种模式:原创 2023-08-19 07:39:39 · 240 阅读 · 0 评论 -
Spark的六种部署模式详细介绍
这些运行模式都可以用于生产环境或开发/测试环境,但选择哪种运行模式取决于具体的使用场景和需求。例如,YARN和K8S模式更常被用于大规模生产环境,因为它们提供了强大的资源管理和调度能力;而Local模式由于资源受限,更常用于开发和测试阶段。原创 2023-08-19 07:21:47 · 763 阅读 · 0 评论 -
Spark修改RDD分区数的五种方式
在Spark中,修改RDD的分区数可以在创建RDD的时候指定,也可以在创建RDD之后通过某些操作来重新分区。原创 2023-08-19 07:05:58 · 453 阅读 · 0 评论 -
Spark中Task数目和分区数目联系
在Spark中,每个分区都会被一个单独的Task处理。换句话说,一个Task是分区数据的一个处理单元。所以,RDD或DataFrame或DataSet的分区数决定了Spark为该RDD或DataFrame或DataSet启动的Task的数量。原创 2023-08-19 06:25:50 · 493 阅读 · 0 评论 -
Spark中引起Shuffle的算子详细介绍
在大数据处理框架中,例如MapReduce或Spark,处理的数据集通常是分布在多个节点上的。因此,当执行需要重新组织或重分布数据的操作时,就可能需要在集群的节点之间传输数据。这种跨节点的数据重新分布过程被称为“Shuffle”。原创 2023-08-19 06:15:13 · 292 阅读 · 0 评论 -
Spark中RDD划分阶段Stage
在Spark中,RDD(Resilient Distributed Dataset,弹性分布式数据集)的计算被组织为一系列的阶段(Stage),这些阶段由窄依赖(Narrow Dependency)和宽依赖(Wide Dependency)决定。下面我将详细解释Spark中RDD的阶段划分:原创 2023-08-18 20:14:49 · 276 阅读 · 0 评论 -
Spark中宽依赖详细介绍
在Spark中,宽依赖(Wide Dependency),也被称为Shuffle Dependency,描述了一种更复杂的RDD之间的依赖关系。在宽依赖中,父RDD的多个分区可能被用来计算子RDD的一个分区,这通常涉及到跨节点的数据重分区(即Shuffle操作)。下面详细介绍宽依赖,并通过一个例子进行说明。原创 2023-08-18 19:21:35 · 760 阅读 · 0 评论 -
Spark中窄依赖详细介绍
在Spark中,依赖关系描述了不同RDD(Resilient Distributed Dataset)之间的关系,它们确定了RDD之间的计算逻辑和数据流动路径。依赖关系可以分为两种类型:窄依赖(Narrow Dependency)和宽依赖(Wide Dependency,也称为Shuffle Dependency)。这里我们详细介绍窄依赖,并通过一个例子进行详细说明。原创 2023-08-18 19:06:10 · 429 阅读 · 0 评论 -
Spark中Task数目分析介绍
在Spark中,Executor是执行Spark任务(Tasks)的工作进程,是Spark应用程序在集群节点上的一个独立进程。每个Spark应用都有自己独立的一组Executors。以下是Executor的详细介绍:原创 2023-08-18 18:36:05 · 321 阅读 · 0 评论 -
Spark性能优化指南
有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。转载 2023-08-18 16:12:03 · 445 阅读 · 0 评论 -
Spark中Application、Job、Stage和Task区别详解
在Spark中,有一些关键的概念,如Application、Job、Stage和Task,它们描述了Spark作业的不同层次和组成部分。下面我将详细介绍每个概念,并通过示例说明它们之间的区别。原创 2023-08-18 15:50:23 · 582 阅读 · 0 评论 -
Spark中foreach算子详解介绍
在Spark中,foreach函数用于在分布式数据集上执行迭代操作,但与collect不同,它并不会将整个数据集的内容收集到驱动程序节点上。而是在每个分布式计算节点上执行指定的操作。原创 2023-08-18 12:51:24 · 943 阅读 · 0 评论 -
Spark中collect算子详解介绍
在Spark中,collect是一个常用的操作,它用于从分布式数据集(如RDD、DataFrame或Dataset)中将数据收集到驱动程序(Driver)节点上,以便在本地进行处理。但要注意,collect操作会将整个数据集的内容传输到Driver,因此只适用于数据集较小的情况。对于大规模数据集,使用collect可能会导致内存溢出或性能问题。原创 2023-08-18 12:38:45 · 1146 阅读 · 0 评论 -
Spark中countByValue算子详解介绍
在 Spark 中,`countByValue` 是一种用于对 RDD 进行操作的行动算子(Action Operator)。它用于统计 RDD 中各个元素的出现次数,并返回一个表示每个元素及其出现次数的映射(Map)。原创 2023-08-18 09:06:13 · 252 阅读 · 0 评论 -
Spark中countByKey算子详解介绍
对于wordcount这个任务之前我们是使用 `reduceByKey` 来进行相同key的值进行聚合,获取每个key对应的值有多少,本文将介绍另外一个更为方便的算子 `countByKey` ,使用它直接就会返回每种key对应的值有多少,以map形式返回。原创 2023-08-18 08:57:28 · 350 阅读 · 0 评论 -
Spark中fold算子详解介绍
上一节我们讲到使用 `aggregate` 函数来实现分区内和分区间进行聚合操作,不过对于 `aggregate` 可以实现分区内和分区间不同的聚合逻辑,但是有些时候我们的分区内和分区间聚合操作一致,那么就可以进行简化使用 `fold` 算子。原创 2023-08-17 20:34:06 · 352 阅读 · 0 评论 -
Spark中aggregate算子详解介绍
前面文章我们讲解了如何使用 `aggregateByKey` 来对相同key的值进行分区内和分区间聚合,本文将使用另外一种算子 `aggregate` 来对数据进行聚合。原创 2023-08-17 20:15:11 · 373 阅读 · 0 评论 -
Spark中reduce算子详解介绍
前面有篇文章讲解了如何使用 `reduceByKey` 这个算子来对键值类型数据进行聚合,该算子实现了将相同key的数据在分区内和分区间按照我们的指定逻辑进行聚合,不过该算子只使用于键值类型,本篇文章讲解更为灵活的聚合算子 `reduce` ,该算子可以处理单值类型和键值类型数据。原创 2023-08-17 17:47:35 · 901 阅读 · 0 评论 -
Spark中sortWith算子详解介绍
前几篇文章我们讲述了 `sortBy` 、`sortByKey` 这两个算子用于对RDD进行排序,但是在Scala中还有另外一种方法可以自定义排序,不过这种方法仅适用于Scala中的Collection类型,对于RDD不适用。原创 2023-08-17 17:08:20 · 315 阅读 · 0 评论 -
Spark中sortByKey算子详解介绍
前面几篇文章讲过 `sortBy` 如何对RDD中元素进行排序,对于sortBy可以处理任何类型,单值类型或者键值类型都可以,不过本文将讲解另外一个算子 `sortByKey` ,该算子仅支持键值类型。原创 2023-08-17 06:49:29 · 497 阅读 · 0 评论 -
2023-08-17 06:05:52,808{yy/MM/ddjava.io.NotSerializableException: com.guang.Test$Student
使用 `Spark` 自定义一个 `Student` 类,然后想使用 `reduceByKey` 对其对象进行排序,排序规则是按照对象的 `age` 属性从小到大进行排序,然后出现如下问题 `2023-08-17 06:05:52,808{yy/MM/ddjava.io.NotSerializableException: com.guang.Test$Student`原创 2023-08-17 06:12:18 · 127 阅读 · 0 评论 -
Spark中combineByKey算子详解介绍
前几篇博文我们分别讲解了 `reduceByKey` 、`aggregateByKey` 、`foldByKey` ,本文将讲解一个更为通用的聚合函数 `combineByKey` ,上述几种函数其实底层都是调用了这个函数,该函数更为灵活。原创 2023-08-16 16:33:49 · 576 阅读 · 0 评论 -
Spark中foldByKey算子详解介绍
上一节我们讲述了 `aggregateByKey` 算子来实现分区间和分区内不同逻辑的聚合,但是我们还有一种情景就是分区内和分区间聚合规则一致,有朋友会说那不就是 `reduceByKey` ,确实是这样的,reduceByKey分区内和分区间执行规则是一致的,但是它没有初始值这个参数,而本文讲解的 `foldByKey` 就可以实现这一点指定初始值,而分区内和分区间聚合规则一致。原创 2023-08-16 16:12:31 · 296 阅读 · 0 评论 -
Spark中aggregateByKey算子详解介绍
上一篇文章我们讲述了如何使用 `reduceByKey` 这个算子按照key进行聚合,本文中继续提出另外一个算子 `aggregateByKey` ,它同样可以实现按照key进行聚合,而且比 `reduceByKey` 更为灵活,对于 `reduceByKey` 来说分区内和分区间的聚合规则是相同的,都是传入的函数逻辑,而 `aggregateByKey` 能够在分区内和分区间实现不同的聚合逻辑。原创 2023-08-16 15:52:42 · 393 阅读 · 0 评论 -
Spark中groupByKey算子详解介绍
前面文章我们讲解了 `groupBy` 这个算子,该算子灵活度很高,可以根据我们自定义函数来映射每个元素的key,然后对其分组,它使用于单值类型和键值类型,本文我们讲解另外一个算子 `groupByKey` ,它仅支持键值类型,它不支持自定义key,仅能够根据自身的key进行分组。原创 2023-08-16 15:03:52 · 803 阅读 · 0 评论