DStream 和 map 中的 Spark Transform 之间的确切区别是什么?
what is exact difference between Spark Transform in DStream and map.?
我正在尝试了解 Spark Streaming 中 Spark DStream 的转换。
我知道 transform 与 map 相比要好得多,但是
有人可以给我一些可以区分变换和映射的实时示例或清晰示例吗?
Spark 流中的 transform
函数允许在流的基础 RDDs
上使用 Apache Spark 的任何转换。 map
用于元素到元素的转换,可以使用 transform
实现。本质上,map
处理 DStream
的元素,而 transform
允许您处理 DStream 的 RDDs
。您可能会发现 http://spark.apache.org/docs/latest/streaming-programming-guide.html#transformations-on-dstreams 很有用。
DStream 有几个 RDD,因为每个批次间隔都是不同的 RDD。
因此,通过使用 transform(),您有机会在对象上应用 RDD 操作
整个DStream。
Spark 文档中的示例:
http://spark.apache.org/docs/latest/streaming-programming-guide.html#transform-operation
Spark Streaming 中的转换函数允许您对 Stream 中的底层 RDD 执行任何转换。例如,您可以使用 Transform 将两个 RDD 加入流中,其中一个 RDD 是一些由文本文件或并行集合制成的 RDD,而另一个 RDD 来自 textfile/socket 等
的 Stream
Map 在特定批次中处理 RDD 的每个元素,并在应用传递给 Map 的函数后生成 RDD。
map
是基本变换,transform
是 RDD 变换
地图
map(func) : Return a new DStream by passing each element of the source
DStream through a function func.
这是一个示例,它演示了 DStream 上的映射操作和转换操作
val conf = new SparkConf().setMaster("local[*]").setAppName("StreamingTransformExample")
val ssc = new StreamingContext(conf, Seconds(5))
val rdd1 = ssc.sparkContext.parallelize(Array(1,2,3))
val rdd2 = ssc.sparkContext.parallelize(Array(4,5,6))
val rddQueue = new Queue[RDD[Int]]
rddQueue.enqueue(rdd1)
rddQueue.enqueue(rdd2)
val numsDStream = ssc.queueStream(rddQueue, true)
val plusOneDStream = numsDStream.map(x => x+1)
plusOneDStream.print()
map
操作将DStream中所有RDD中的每个元素加1,输出结果如下
-------------------------------------------
Time: 1501135220000 ms
-------------------------------------------
2
3
4
-------------------------------------------
Time: 1501135225000 ms
-------------------------------------------
5
6
7
-------------------------------------------
变换
transform(func) : Return a new DStream by applying a RDD-to-RDD function
to every RDD of the source DStream. This can be used to do arbitrary
RDD operations on the DStream.
val commonRdd = ssc.sparkContext.parallelize(Array(0))
val combinedDStream = numsDStream.transform(rdd=>(rdd.union(commonRdd)))
combinedDStream.print()
transform 允许对 DStream 中的 RDD 执行诸如 join、union 等 RDD 操作,此处给出的示例代码将产生如下输出
-------------------------------------------
Time: 1501135490000 ms
-------------------------------------------
1
2
3
0
-------------------------------------------
Time: 1501135495000 ms
-------------------------------------------
4
5
6
0
-------------------------------------------
Time: 1501135500000 ms
-------------------------------------------
0
-------------------------------------------
Time: 1501135505000 ms
-------------------------------------------
0
-------------------------------------------
此处包含元素 0
的 commonRdd
与 DStream 中的所有底层 RDD 执行联合操作。
示例 1)
排队的男人进入房间,换衣服,然后与他们选择的女人结婚。
1) 换装是map操作(属性是自己变换的)
2) 娶女人是对你的merge/filter操作,但在别人的影响下,我们可以称之为真正的转换操作。
示例 2)
学生进入大学,少数人听了2节课,其他人听了4节课,以此类推。
1) 听课就是图操作,一般学生都在做
2) 但要确定讲师教给他们的内容取决于讲师 RDD 数据,他的日程安排。
假设转换操作是您要过滤或验证的维度或静态 table 以确定适合您的数据,并且删除可能是垃圾。
如果我有 0-1 秒的数据 "Hello How" 以及接下来 1-2 秒的“你是吗”。然后,在 map 和 reduce by key 示例的情况下,如上所示将为第一批产生输出 (hello,1) 和 (How,1),并为下一批产生输出 (are,1) 和 (you,1) batch.But 与下一个示例类似,使用 "transform function" 输出
会有什么不同
我正在尝试了解 Spark Streaming 中 Spark DStream 的转换。
我知道 transform 与 map 相比要好得多,但是 有人可以给我一些可以区分变换和映射的实时示例或清晰示例吗?
Spark 流中的 transform
函数允许在流的基础 RDDs
上使用 Apache Spark 的任何转换。 map
用于元素到元素的转换,可以使用 transform
实现。本质上,map
处理 DStream
的元素,而 transform
允许您处理 DStream 的 RDDs
。您可能会发现 http://spark.apache.org/docs/latest/streaming-programming-guide.html#transformations-on-dstreams 很有用。
DStream 有几个 RDD,因为每个批次间隔都是不同的 RDD。
因此,通过使用 transform(),您有机会在对象上应用 RDD 操作
整个DStream。
Spark 文档中的示例: http://spark.apache.org/docs/latest/streaming-programming-guide.html#transform-operation
Spark Streaming 中的转换函数允许您对 Stream 中的底层 RDD 执行任何转换。例如,您可以使用 Transform 将两个 RDD 加入流中,其中一个 RDD 是一些由文本文件或并行集合制成的 RDD,而另一个 RDD 来自 textfile/socket 等
的 StreamMap 在特定批次中处理 RDD 的每个元素,并在应用传递给 Map 的函数后生成 RDD。
map
是基本变换,transform
是 RDD 变换
地图
map(func) : Return a new DStream by passing each element of the source DStream through a function func.
这是一个示例,它演示了 DStream 上的映射操作和转换操作
val conf = new SparkConf().setMaster("local[*]").setAppName("StreamingTransformExample")
val ssc = new StreamingContext(conf, Seconds(5))
val rdd1 = ssc.sparkContext.parallelize(Array(1,2,3))
val rdd2 = ssc.sparkContext.parallelize(Array(4,5,6))
val rddQueue = new Queue[RDD[Int]]
rddQueue.enqueue(rdd1)
rddQueue.enqueue(rdd2)
val numsDStream = ssc.queueStream(rddQueue, true)
val plusOneDStream = numsDStream.map(x => x+1)
plusOneDStream.print()
map
操作将DStream中所有RDD中的每个元素加1,输出结果如下
-------------------------------------------
Time: 1501135220000 ms
-------------------------------------------
2
3
4
-------------------------------------------
Time: 1501135225000 ms
-------------------------------------------
5
6
7
-------------------------------------------
变换
transform(func) : Return a new DStream by applying a RDD-to-RDD function to every RDD of the source DStream. This can be used to do arbitrary RDD operations on the DStream.
val commonRdd = ssc.sparkContext.parallelize(Array(0))
val combinedDStream = numsDStream.transform(rdd=>(rdd.union(commonRdd)))
combinedDStream.print()
transform 允许对 DStream 中的 RDD 执行诸如 join、union 等 RDD 操作,此处给出的示例代码将产生如下输出
-------------------------------------------
Time: 1501135490000 ms
-------------------------------------------
1
2
3
0
-------------------------------------------
Time: 1501135495000 ms
-------------------------------------------
4
5
6
0
-------------------------------------------
Time: 1501135500000 ms
-------------------------------------------
0
-------------------------------------------
Time: 1501135505000 ms
-------------------------------------------
0
-------------------------------------------
此处包含元素 0
的 commonRdd
与 DStream 中的所有底层 RDD 执行联合操作。
示例 1)
排队的男人进入房间,换衣服,然后与他们选择的女人结婚。
1) 换装是map操作(属性是自己变换的)
2) 娶女人是对你的merge/filter操作,但在别人的影响下,我们可以称之为真正的转换操作。
示例 2) 学生进入大学,少数人听了2节课,其他人听了4节课,以此类推。
1) 听课就是图操作,一般学生都在做
2) 但要确定讲师教给他们的内容取决于讲师 RDD 数据,他的日程安排。
假设转换操作是您要过滤或验证的维度或静态 table 以确定适合您的数据,并且删除可能是垃圾。
如果我有 0-1 秒的数据 "Hello How" 以及接下来 1-2 秒的“你是吗”。然后,在 map 和 reduce by key 示例的情况下,如上所示将为第一批产生输出 (hello,1) 和 (How,1),并为下一批产生输出 (are,1) 和 (you,1) batch.But 与下一个示例类似,使用 "transform function" 输出
会有什么不同