2016-07-18 1 views
1

У меня есть два DStreams. Пусть A:DStream[X] и B:DStream[Y].Как получить декартовое произведение двух DStream в Spark Streaming с помощью Scala?

Я хочу, чтобы получить декартово произведение из них, другими словами, новый C:DStream[(X, Y)] , содержащий все пары X и Y значений.

Я знаю, что есть функция cartesian для RDD. Я смог найти только this similar question, но он находится на Java и поэтому не отвечает на мой вопрос.

+0

Конечно. 'A: DStream [(String, Int)]' - это набор терминов с вычисленным значением, связанный с каждым из них. 'B: DStream [Int]' является результатом функции 'count', поэтому он содержит только одно целочисленное значение. Я хочу вычислить что-то, используя целочисленное значение от A и целочисленное значение от B. Получив декартово произведение A и B, я получу новый DStream со значением от B, добавленным к каждой записи A, а I сможет вычислить мой результат с помощью карты. Порядок не имеет значения. Я очень новый пользователь Spark и Scala, поэтому не стесняйтесь советовать мне лучше, если я ошибаюсь. – Coukaratcha

ответ

1

Скала эквивалент ответа Связанный вопрос, (в игнорировании Time v3, который не используется там) является

A.transformWith(B, (rddA: RDD[X], rddB: RDD[Y]) => rddA.cartesian(rddB)) 

или короче

A.transformWith(B, (_: RDD[X]).cartesian(_: RDD[Y])) 
+0

Большое спасибо. Это соответствует моим ожиданиям. – Coukaratcha

+0

В этом случае вы должны принять ответ. –