在运行例子的时候. 遇到需要去除表头的情况. 将一般的几种做法记录于此.
文件 班级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其实使用filter()算子过滤我们需要抛弃的行是最容易的操作.
如何删掉rdd中的某几行数据?
Spark RDD去掉前n行数据
根据统计. 其与分片无关. 但是当数据量过多时, 加索引产生性能问题.
方法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中的.
