2015-03-13 2 views
0

Я использую функцию искажений Spark для создания списка N пар значений.Декартовы DStream

Я тогда карту через эти значения, чтобы генерировать показатель расстояния между каждым из пользователей:

val cartesianUsers: org.apache.spark.rdd.RDD[(distance.classes.User, distance.classes.User)] = users.cartesian(users) 
cartesianUsers.map(m => manDistance(m._1, m._2)) 

Это работает, как ожидалось.

Использование Спарк Streaming библиотеки создать DStream, а затем карту над ним:

val customReceiverStream: ReceiverInputDStream[String] = ssc.receiverStream.... 
customReceiverStream.foreachRDD(m => { 
    println("size is " + m) 
}) 

Я мог бы использовать декартово функцию в customReceiverStream.foreachRDD но согласно документу http://spark.apache.org/docs/1.2.0/streaming-programming-guide.htm это не его предполагаемого использования:

foreachRDD (func) Самый общий оператор вывода, который применяет функцию, func, to each RDD generated from the stream. This function should push the data in each RDD to a external system, like saving the RDD to files, or writing it over the network to a database. Note that the function func is executed in the driver process running the streaming application, and will usually have RDD actions in it that will force the computation of the streaming RDDs.

Как вычислить декартов DStream? Возможно, я неправильно понимаю использование DStreams?

ответ

1

Я не знал, метод преобразования:

cartesianUsers.transform(car => car.cartesian(car)) 

Хороший разговор, который также упоминает функцию преобразования при температуре около 17:00 https://www.youtube.com/watch?v=g171ndOHgJ0

Смежные вопросы