对于大数据的一些处理方法

问题:数据太大,在内存中无法一次性装入。

题1:给定一个大小超过100亿的文件,该文件是用来存储IP地址,找到出现次数最多的IP地址。
分析:100亿就是大约就是10G,对于现在的计算机而言,内存中无法容纳这么大的文件。
解决:将一个大文件切分为多个小文件,例如:我们可以将该100亿的大文件切分为1000个文件,即每个文件的大小大约就是10M,那么就可以在内存中容纳得下了。
那么,我们要怎么来切分这个100亿的大文件呢?平均分?很显然是不可以的,如果分到某个文件的IP地址出现的次数都是1次,那么该文件出现最多的IP就是这10M个IP。那么就会浪费很大的空间,不符合我们的预期。所以,在此我们可以采用哈希表的方式,对IP先转换为对应的整数,在对该数取模,将模相同的IP放在同一个文件之中,那么这样在同一个文件中出现IP相同的概率就会大一些。
然后我们就可以分别统计出这1000个文件中IP次数最多的IP,然后再将这1000个文件进行汇总。如下面的图解。

图解

题2:给定100亿个整数,找到其中只出现一次的整数。
分析:遇到这样的问题,我们首先想到的处理方法就是&#x

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据数据处理方法有很多种,常见的有Hadoop、Spark、Flink等。以下是一些示例代码: 1. Hadoop MapReduce ```java public class WordCount { public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } } } public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(Map.class); job.setCombinerClass(Reduce.class); job.setReducerClass(Reduce.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` 2. Spark ```scala val conf = new SparkConf().setAppName("wordCount") val sc = new SparkContext(conf) val textFile = sc.textFile("hdfs://...") val counts = textFile.flatMap(line => line.split(" ")) .map(word => (word, 1)) .reduceByKey(_ + _) counts.saveAsTextFile("hdfs://...") ``` 3. Flink ```java StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> text = env.socketTextStream("localhost", 9999); DataStream<Tuple2<String, Integer>> wordCounts = text .flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { for (String word : value.split(" ")) { out.collect(new Tuple2<>(word, 1)); } } }) .keyBy(0) .sum(1); wordCounts.print(); env.execute("Word Count"); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值