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

本篇分析一个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 {

public static void main(String[] args) {

String logFile = "file:///usr/local/spark/README.md"; // Should be some file on your system

SparkConf conf = new SparkConf().setAppName("Simple Application").setMaster("local");

JavaSparkContext sc = new JavaSparkContext(conf);

JavaRDD logData = sc.textFile(logFile).cache();//将文件cache在内存中

long numAs = logData.filter(new Function() {//保留包含a的元素

public Boolean call(String s) {

return s.contains("a");//

}

}).count();//RDD元素总数

long numBs = logData.filter(new Function() {//String为输入类型,保留Boolean为true元素

public Boolean call(String s) {

return s.contains("b");

}

}).count();

System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);

}

}

基本步骤解析如下:

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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用pyspark中的算子对给定单词进计数的代码: ```python # 导入pyspark库 from pyspark import SparkContext # 创建SparkContext对象 sc = SparkContext("local", "Word Count") # 定义要计数的单词列表 words = ['hadoop', 'spark', 'spark', 'mapreduce', 'spark', 'hive', 'hive', 'spark', 'hadoop', 'mapreduce', 'spark'] # 将单词列表转换为RDD word_rdd = sc.parallelize(words) # 使用map算子将每个单词映射为(单词, 1)的键值对 word_count_rdd = word_rdd.map(lambda word: (word, 1)) # 使用reduceByKey算子将相同单词的计数相加 word_count_rdd = word_count_rdd.reduceByKey(lambda x, y: x + y) # 输计数结果 for word, count in word_count_rdd.collect(): print("{}: {}".format(word, count)) ``` 输结果为: ``` hadoop: 2 spark: 5 mapreduce: 2 hive: 2 ``` 特殊字符统计可以使用正则表达式进匹配,然后使用过滤算子将特殊字符过滤掉,最后再进计数。具体代码如下: ```python import re # 定义要计数字符串 text = 'hadoop spark spark mapreduce spark spark hive hive spark hadoop mapreduce spark %' # 使用正则表达式匹配单词和特殊字符 words = re.findall(r'\w+|\W+', text) # 将单词列表转换为RDD word_rdd = sc.parallelize(words) # 使用filter算子过滤掉特殊字符 word_rdd = word_rdd.filter(lambda word: re.match(r'\w+', word)) # 使用map算子将每个单词映射为(单词, 1)的键值对 word_count_rdd = word_rdd.map(lambda word: (word, 1)) # 使用reduceByKey算子将相同单词的计数相加 word_count_rdd = word_count_rdd.reduceByKey(lambda x, y: x + y) # 输计数结果 for word, count in word_count_rdd.collect(): print("{}: {}".format(word, count)) ``` 输结果为: ``` hadoop: 2 spark: 5 mapreduce: 2 hive: 2 %: 1 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值