zoukankan      html  css  js  c++  java
  • DStream 转换操作----无状态转换

    DStream转换操作包括无状态转换和有状态转换。
    无状态转换:每个批次的处理不依赖于之前批次的数据。
    有状态转换:当前批次的处理需要使用之前批次的数据或者中间结果。有状态转换包括基于滑动窗口的转换和追踪状态变化的转换(updateStateByKey)。

    DStream无状态转换操作包括:

    map(func) :对源DStream的每个元素,采用func函数进行转换,得到一个新的DStream;
    * flatMap(func): 与map相似,但是每个输入项可用被映射为0个或者多个输出项;
    * filter(func): 返回一个新的DStream,仅包含源DStream中满足函数func的项;
    * repartition(numPartitions): 通过创建更多或者更少的分区改变DStream的并行程度;
    * union(otherStream): 返回一个新的DStream,包含源DStream和其他DStream的元素;
    * count():统计源DStream中每个RDD的元素数量;
    * reduce(func):利用函数func聚集源DStream中每个RDD的元素,返回一个包含单元素RDDs的新DStream;
    * countByValue():应用于元素类型为K的DStream上,返回一个(K,V)键值对类型的新DStream,每个键的值是在原DStream的每个RDD中的出现次数;
    * reduceByKey(func, [numTasks]):当在一个由(K,V)键值对组成的DStream上执行该操作时,返回一个新的由(K,V)键值对组成的DStream,每一个key的值均由给定的recuce函数(func)聚集起来;
    * join(otherStream, [numTasks]):当应用于两个DStream(一个包含(K,V)键值对,一个包含(K,W)键值对),返回一个包含(K, (V, W))键值对的新DStream;
    * cogroup(otherStream, [numTasks]):当应用于两个DStream(一个包含(K,V)键值对,一个包含(K,W)键值对),返回一个包含(K, Seq[V], Seq[W])的元组;
    * transform(func):通过对源DStream的每个RDD应用RDD-to-RDD函数,创建一个新的DStream。支持在新的DStream中做任何RDD操作。

    注意:

    1. 想要使用countByValue ,reduceByKey等 需要使用 flatMap 如果用map处理数据:报如下的错误

    Exception in thread "main" org.apache.spark.SparkException: Cannot use map-side combining with array keys.
    flatMap:主要用于spark Streaming
    map:到处用
    区别:
    以读文件例子:map会为每一行返回一个对象,但flatMap会汇总每行返回的对象成为一个更大的对象(map-side的错误也能看得出)
    2.
    val sc=new SparkContext(conf)
    
    val lines2=sc.textFile("file:///**/1.txt")
    2.1 lines2.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey(_+_)
    
    2.2 lines2.flatMap(lines=>lines.split(" ")).countByValue()
    
                  2.1和2.2 结果一样 
  • 相关阅读:
    idea从零搭建简单的springboot+Mybatis
    关于监听微服务功能
    final
    mysql数据库分页查询优化
    Mysql中“select ... for update”排他锁(转)
    HashMap(常用)方法个人理解
    5.1 Object类型
    5.3 Date类型
    4.1-4.2 基本类型及引用类型,执行环境及作用域
    20.JSON
  • 原文地址:https://www.cnblogs.com/soyo/p/7692795.html
Copyright © 2011-2022 走看看