Что такое точная разница между Spark Transform в DStream и карте?

Я пытаюсь понять преобразование в Spark DStream в Spark Streaming.

Я знал, что преобразование в значительной степени превосходит по сравнению с картой, но Может ли кто-нибудь дать мне пример в реальном времени или ясный пример, который может отличать трансформацию и карту?

Ответ 1

Функция transform в потоке Spark позволяет использовать любое из преобразований Apache Spark в базовом RDDs для потока. map используется для преобразования элемента в элемент и может быть реализован с помощью transform. По существу, map работает с элементами DStream и transform, позволяет работать с RDDs DStream. Вы можете найти http://spark.apache.org/docs/latest/streaming-programming-guide.html#transformations-on-dstreams, чтобы быть полезным.

Ответ 2

map является элементарным преобразованием и transform является преобразованием RDD

Карта


map (func): возвращает новый DStream, передавая каждый элемент источника DStream через функцию 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 добавляет 1 к каждому элементу во всех RDD в DStream, дает результат, как показано ниже

-------------------------------------------
Time: 1501135220000 ms
-------------------------------------------
2
3
4

-------------------------------------------
Time: 1501135225000 ms
-------------------------------------------
5
6
7

-------------------------------------------

преобразования


transform (func): возвращает новый DStream, применяя функцию RDD-to-RDD для каждого RDD источника DStream. Это можно использовать для произвольного RDD в DStream.

val commonRdd = ssc.sparkContext.parallelize(Array(0))
val combinedDStream = numsDStream.transform(rdd=>(rdd.union(commonRdd)))
combinedDStream.print()

transform позволяет выполнять RDD-операции, такие как объединение, объединение и т.д. на RDD в DStream, приведенный здесь пример кода будет выдавать результат ниже

-------------------------------------------
Time: 1501135490000 ms
-------------------------------------------
1
2
3
0

-------------------------------------------
Time: 1501135495000 ms
-------------------------------------------
4
5
6
0

-------------------------------------------
Time: 1501135500000 ms
-------------------------------------------
0

-------------------------------------------
Time: 1501135505000 ms
-------------------------------------------
0
-------------------------------------------

здесь commonRdd, который содержит элемент 0, выполняется операция объединения со всеми лежащими в основе RDD в DStream.

Ответ 3

DStream имеет несколько RDD, так как каждый интервал между пакетами является другим RDD.
Таким образом, используя transform(), вы получаете возможность применить операцию RDD на весь DStream.

Пример из Spark Docs: http://spark.apache.org/docs/latest/streaming-programming-guide.html#transform-operation

Ответ 4

Функция преобразования в Spark Streaming позволяет выполнять любые преобразования в базовом RDD в потоке. Например, вы можете присоединиться к двум RDD при потоковой передаче с использованием Transform, в котором одним RDD будет некоторое RDD, созданное из текстового файла или параллельной коллекции, а другое RDD поступает из Stream текстового файла/сокета и т.д.

Карта работает с каждым элементом RDD в определенной партии и приводит к RDD после применения функции, переданной в Map.

Ответ 5

пример 1)

мужчины в очереди приходят в комнату, меняют платье, а потом выходят замуж за женщин по своему выбору.

1) Смена платья - это операция на карте (где они сами преобразуются в атрибуты)

2) Женатая женщина - это операция слияния/фильтрации на вас, но под воздействием других, которую мы можем назвать реальной операцией преобразования.

Пример 2) Студент поступает в колледж, мало кто посещает 2 лекции, мало кто посещает 4, и так далее.

1) Посещение лекций - это работа с картой, чем обычно занимаются студенты.

2) но определить, чему их научил лектор, зависит от данных лектора RDD, его повестки дня.

Предположим, что операция Transform - это Dimension или статическая таблица, которую вы хотите отфильтровать или проверить, чтобы идентифицировать нужные вам данные, и удаление может быть нежелательным.

Ответ 6

Если у меня есть данные от 0-1 с "Hello How" и за следующие 1-2 с "Are You". Затем в случае карты и сокращения с помощью ключевого примера, как показано выше, будут получены выходные данные (hello, 1) и (How, 1) для первого пакета и (are, 1) и (you, 1) для следующего пакета. Но аналогично для следующего примера, использующего "функцию преобразования", какова будет разница в выводе