spark程序——统计包含字符a或者b的行数

本文介绍了一个使用Spark统计文本中特定字符出现次数的例子程序。通过Java实现,展示了如何配置Spark环境、读取文件、过滤并计数包含指定字符的行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇分析一个spark例子程序。

程序实现的功能是:分别统计包含字符a、b的行数。


java源码如下:

package sparkTest;


import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;


public class SimpleApp {
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>public static void main(String[] args) {
<span style="white-space:pre">		</span>String logFile = "file:///usr/local/spark/README.md"; // Should be some file on your system
<span style="white-space:pre">		</span>SparkConf conf = new SparkConf().setAppName("Simple Application").setMaster("local");
<span style="white-space:pre">		</span>JavaSparkContext sc = new JavaSparkContext(conf);
<span style="white-space:pre">		</span>JavaRDD<String> logData = sc.textFile(logFile).cache();<span style="white-space:pre">		</span>//将文件cache在内存中


<span style="white-space:pre">		</span>long numAs = logData.filter(new Function<String, Boolean>() {<span style="white-space:pre">	</span>//保留包含a的元素
<span style="white-space:pre">			</span>public Boolean call(String s) {
<span style="white-space:pre">				</span>return s.contains("a");<span style="white-space:pre">		</span>//
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}).count();<span style="white-space:pre">	</span>//RDD元素总数


<span style="white-space:pre">		</span>long numBs = logData.filter(new Function<String, Boolean>() {<span style="white-space:pre">		</span>//String为输入类型,保留Boolean为true元素
<span style="white-space:pre">			</span>public Boolean call(String s) {
<span style="white-space:pre">				</span>return s.contains("b");
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}).count();


<span style="white-space:pre">		</span>System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);
<span style="white-space:pre">	</span>}
}


基本步骤解析如下:

1、设置sparkContext,包括sparkConf,读取文件的地址和协议。

2、将文件内容cache()在内存中。经过实验,不cache()也能执行显示正确结果。

3、JavaRDD.filter()。对元素进行过滤,过滤的方法是函数Function(String, Boolean)。

具体定义在call(String s)中。

其中Function的参数String与call的参数String对应。Function的参数Boolean与call函数返回值Boolean类型对应。

返回Boolean为true的元素通过filter,保留在新生成的RDD中。

4、JavaRDD.count()对RDD元素个数进行统计。

5、最后,打印结果。


注意:这里的filter()、count()对应的就是transformation、action。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值