Spark 去掉前几行 & 去掉表头

前言

在运行例子的时候. 遇到需要去除表头的情况. 将一般的几种做法记录于此.

  • 文件
班级ID 姓名 年龄 性别 科目 成绩
12 张三 25 男 chinese 50
12 张三 25 男 math 60
12 张三 25 男 english 70
12 李四 20 男 chinese 50
12 李四 20 男 math 50
12 李四 20 男 english 50
12 王芳 19 女 chinese 70
12 王芳 19 女 math 70
12 王芳 19 女 english 70
13 张大三 25 男 chinese 60
13 张大三 25 男 math 60
13 张大三 25 男 english 70
13 李大四 20 男 chinese 50
13 李大四 20 男 math 60
13 李大四 20 男 english 50
13 王小芳 19 女 chinese 70
13 王小芳 19 女 math 80
13 王小芳 19 女 english 70

相关操作-个人选择

  • 去除第一行
# 使用textFile读取整个文件.
JavaRDD<String> examLinesRDD = SeanSparkConfig.sparkContext.textFile(SeanSparkConfig.exameDateFilePath);

# 读取文件第一行
String firstLine = examLinesRDD.first();
JavaRDD<Student> studentRDD;studentRDD = examLinesRDD.
				filter(line -> !line.equals(firstLine)). // 去除第一行表头

其实使用filter()算子过滤我们需要抛弃的行是最容易的操作.


其余相关操作(参考1)

参考1
delcomments = ["嗯嗯嗯嗯", "啦啦啦", "买买买买"]
def delcom(line):
    for i in delcomments:
        if i in line:
            return 1
    return 0
 
comment = comment.filter(lambda line: delcom(line) != 1)

如何删掉rdd中的某几行数据?


参考2
# 使用zipWithIndex算子
rdd.zipWithIndex().filter(_._2>=n).keys  // n换成对应的第几列即可

Spark RDD去掉前n行数据


参考3-比较详细

  • 方法1-zipWithIndex 索引法.
val path = "files/data.txt"
val rdd = sc.textFile(path)
println("分区数:" + rdd.getNumPartitions)
val rdd1 = rdd.zipWithIndex()
//过滤掉索引小于等于2的
val rdd2 = rdd1.filter(_._2 > 2)
rdd1.foreach(println)
println("**********分割线***********")
rdd2.map(kv => kv._1).foreach(println)

根据统计. 其与分片无关. 但是当数据量过多时, 加索引产生性能问题.

  • 方法2-take/fileter 法
val path = "files/data.txt"
val rdd = sc.textFile(path, 8)
println("分区数:" + rdd.getNumPartitions)
//前三条
val arr = rdd.take(3)
//过滤掉arr里的数据
val rdd3 = rdd.filter(!arr.contains(_))
rdd3.foreach(println)
  • 方法3-Linux相关命令
# 查询原文件
cat data.txt 
# 新建覆盖文件 
tail -n+4 data.txt > data_new.txt
# 替换
mv data_new.txt data.txt 

文件过大可能会有问题?

如何解决spark开发中遇到需要去掉文件前几行数据的问题


总结

其实思路非常简单. 查询出你需要过滤的数据, 使用filter算子进行过滤即可.
对于不同分片上的数据. 你可以考虑写死代码的方式.
String toFilter="姓名 年龄 ID 性别"; rdd.filter(str->!str.equals(toFilter)).
还有一点值得注意的是, 使用equals替换==. 因为多个Executor的情况下, 是在不同JVM中的.

### 回答1: 1. 什么是Spark Core?它的作用是什么? Spark Core是Spark的核心组件,它提供了分布式任务调度、内存计算和数据存储等基础功能,是Spark的基础架构。Spark Core的作用是管理集群资源,将任务分配给集群中的节点进行计算,并将计算结果返回给驱动程序。 2. Spark SQL是什么?它的作用是什么? Spark SQL是Spark生态系统中的一个组件,它提供了一种基于SQL语言的数据处理方式,可以方便地处理结构化数据。Spark SQL的作用是将结构化数据转换为RDD,然后利用Spark Core进行分布式计算,最后将计算结果返回给用户。 3. 什么是Spark Streaming?它的作用是什么? Spark Streaming是Spark生态系统中的一个组件,它提供了一种实时数据处理方式,可以对流式数据进行实时计算。Spark Streaming的作用是将流式数据分成一系列小批次进行处理,然后利用Spark Core进行分布式计算,最后将计算结果返回给用户。 4. Spark Core和Spark SQL的区别是什么? Spark Core是Spark的核心组件,提供了分布式任务调度、内存计算和数据存储等基础功能;而Spark SQL是基于SQL语言的数据处理组件,可以方便地处理结构化数据。Spark Core主要用于处理非结构化数据,而Spark SQL主要用于处理结构化数据。 5. Spark Streaming和Spark Core的区别是什么? Spark Streaming是Spark生态系统中的一个组件,提供了一种实时数据处理方式,可以对流式数据进行实时计算;而Spark Core是Spark的核心组件,提供了分布式任务调度、内存计算和数据存储等基础功能。Spark Streaming主要用于处理实时数据,而Spark Core主要用于处理批处理数据。 ### 回答2: Spark是一个快速、通用、可扩展的计算引擎,可以处理大规模的数据。Spark的核心是Spark Core,它提供了任务调度、内存管理、错误恢复和与存储系统的交互等基本功能,同时还提供了对分布式数据集的RDD(Resilient Distributed Datasets)的支持。 以下是大数据基础面试题五中的关于Spark Core的问题及回答: 1. 什么是Spark Core? Spark Core是Spark的核心组件,提供了Spark的核心功能。它是一个通用型计算引擎,可用于大规模数据处理和分布式系统开发。 2. Spark Core有哪些特征? Spark Core有以下特征: (1)速度快:通过内存计算和基于迭代式计算模型的优化,Spark可以比MapReduce更快地进行大规模数据处理。 (2)用户友好:Spark提供了Scala、Java和Python等编程语言的API,支持丰富的数据处理操作,如Map、Filter、Reduce和Join等。 (3)内存计算:Spark将数据缓存在内存中,可在运行时动态调整内存使用情况,这一特性使得Spark更加高效。 (4)易于扩展:Spark可在多个节点上运行,并支持动态添加节点,从而更好地处理大规模数据处理任务。 3. Spark Core与Hadoop的MapReduce有何不同? 与Hadoop的MapReduce相比,Spark Core具有以下不同之处: (1)速度快:Spark采用基于内存的计算方式,不需要将数据频繁写入磁盘,从而能够比MapReduce更快地处理数据。 (2)支持更多的操作:Spark提供了更多的操作,如Filter、Join、GroupBy和Distinct等,而MapReduce只支持Map和Reduce操作。 (3)缓存机制:Spark支持缓存数据,避免了MapReduce需要重复读取磁盘数据的问题。 4. RDD是什么?它有哪些特征? RDD是Resilient Distributed Dataset的缩写,指弹性分布式数据集。它是Spark的核心数据结构之一。RDD被设计为可靠、高度可扩展的数据处理模型,可以在多个节点上进行并行计算。 RDD具有以下特征: (1)分片:RDD将数据划分为多个小的数据块,然后在不同的节点上并行处理。 (2)不可变:RDD是不可变的,一旦创建就无法修改,只能进行转换操作来创建新的RDD。 (3)容错:RDD具有容错机制,如果有节点出现故障,Spark可以自动重新计算数据。 (4)缓存:RDD支持缓存机制,缓存后可以在内存中快速访问数据。 5. 如何创建RDD? 创建RDD需要以下步骤: (1)获取SparkContext对象:首先需要创建一个SparkContext对象,它是管理Spark应用程序的入口点。 (2)获取数据:从文件系统、HDFS或其他数据源中获取数据。 (3)创建RDD:通过将数据分割为一组元素来创建RDD。 例如,以下代码可以从文件系统中获取数据,并创建一个RDD: val sc = new SparkContext(“local”, “Word Count App”) val lines = sc.textFile(“/path/to/file”) val words = lines.flatMap(line => line.split(“ “)) val wordCounts = words.map(word => (word, 1)).reduceByKey((a, b) => a + b) ### 回答3: Spark Core是Apache Spark的最基本组成部分,它主要负责管理整个Spark集群及其资源,并支持在集群上进行分布式数据处理。它提供了分布式任务的调度、内存管理、任务的容错等核心功能。下面就Spark Core的一些重要特性进行详细介绍。 1. RDD数据模型:RDD的全称是Resilient Distributed Datasets,叫做弹性分布式数据集。它是Spark Core的核心概念,用于存储和处理分布式数据。RDD的特点是容错、分布式和数据流式处理,并且可以进行缓存、存储和检索等操作。RDD在Spark核心计算引擎中发挥着重要的作用。 2. 分布式任务调度:Spark Core可以自动将任务分配到整个集群中的多个节点上进行处理。Spark可以按照一定的优先级或算法将任务分解成多个小任务,并对这些任务进行动态地调度管理。Spark的调度器支持动态调整任务的优先级和切换运算模式。 3. 内存管理机制:Spark Core可以通过任务的内存使用限制,对每个任务进行内存管理和限制,自动捕获运行过程中的内存错误,并且可以及时恢复失败的任务。此外,Spark还提供了多种内存管理标准和检查机制,方便用户了解程序的运行情况和内存使用状态。 4. 任务容错机制:在高并发环境下,任务容错机制非常关键。Spark Core提供了一系列的容错机制和恢复机制,例如,当一个节点发生了故障或者内存错误时,Spark会自动将处理不完的任务重新分发到另一个可用节点上进行处理。 5. 实时数据处理:Spark Core提供了不少实时数据处理的功能及接口。它可以进行实时数据的流式处理,支持基于时间滑动窗口的数据操作及处理,以及对实时数据的统计、分析和监控处理等。 通过对这些特性的了解,可以更好地理解Spark Core的实际应用场景,并且可以在面试过程中更好地回答Spark Core相关的问题。需要注意的是,Spark Core在实际应用中还有很多细节和复杂的问题需要考虑,需要认真学习和实践才能掌握和应用好它的各种特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值