簡體   English   中英

如何合並兩個不同類型的流RDD

[英]How to merge two different type streams RDDs

我需要合並兩個不同的流RDD。

流類型的Uno是org.apache.spark.streaming.dstream.DStream [String],另一個是org.apache.spark.streaming.dstream.DStream [twitter4j.Status]類型。

我試過了:

  val streamRDD = stream.union(sentiments)

但這不會成功:

[error]  found   : org.apache.spark.streaming.dstream.DStream[String]
[error]  required: org.apache.spark.streaming.dstream.DStream[twitter4j.Status]
[error]       val streamRDD = stream.union(sentiments)
[error]                                    ^

問題是, union僅適用於相同元素類型的兩個DStream ,而您具有DStream[String]DStream[twitter4j.Status]String不是twitter4j.Status

我假設您具有以下類型:

val stream: DStream[twitter4j.Status]
val sentiments: DStream[String]

您有不同的選擇來解決此問題:

    1. 您確定應該將Stringtwitter4j.Status混合到一個DStream因為它們在您的上下文中表示相同的信息:將任一DStream轉換為與另一個DStream匹配

      • a)轉換stream以匹配sentiments ,因此您需要轉換twitter4j.Status => String ,可能可以使用_.toString如下所示:

         val stream2 = stream.map(_.toString) val result = stream2.union(sentiments) 
      • b)轉換sentiments以匹配stream ,要求String => twitter4j.Status
    1. Stringtwitter4j.Status在您的上下文中是兩個不同的事物,您想保持兩者之間的區別,但仍將它們組合為一個DStream

    通常,您可以使用Sum -type表示每種情況,這里只有兩種,所以我們可以使用預定義的Either

     type R = DStream[Either[String,twitter4j.Status] // shorter val streamL: R = stream.map(Left(_)) val sentimentR: R = sentiments.map(Right(_)) val result: R = streamL.union(sentimentsR) 

    最后,您將獲得一個流,其中每個元素可以是包裹在LeftString或包裹在Righttwitter4j.Status ,從而可以在處理流時區分兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM