2017-07-15 7 views
1

ハッシュタグ、作成者、および以下の形式のユーザーを表示しているTwitterデータストリームを作成しました。スカラ・フラットニングリストの埋め込みリスト

(List(timetofly, hellocake),Shera_Eyra,List(blxcknicotine, kimtheskimm))

ため、私は組み込みリストのこの形式の分析を行うことはできません。この形式でデータを表示する別のデータストリームを作成するにはどうすればよいですか?ここで

timetofly, Shera_Eyra, blxcknicotine timetofly, Shera_Eyra, kimtheskimm hellocake, Shera_Eyra, blxcknicotine hellocake, Shera_Eyra, kimtheskimm

データを生成するために私のコードです:

私はこのために理解するために使用します
val sparkConf = new SparkConf().setAppName("TwitterPopularTags") 
val ssc = new StreamingContext(sparkConf, Seconds(sampleInterval)) 
val stream = TwitterUtils.createStream(ssc, None) 
val data = stream.map {line => 
     (line.getHashtagEntities.map(_.getText), 
     line.getUser().getScreenName(), 
     line.getUserMentionEntities.map(_.getScreenName).toList) 
    } 
+0

あなたは 'List [String]、String、List [String]'の 'Tuple3'を持っていますか?あなたの出力の望ましいタイプは何ですか? – user4601931

+0

これを文字列のリストとして見たいのですが – user8312833

答えて

0

val data = (List("timetofly", "hellocake"), "Shera_Eyra", List("blxcknicotine", "kimtheskimm")) 

    val result = for { 
    hashtag <- data._1 
    user = data._2 
    mentionedUser <- data._3 
    } yield (hashtag, user, mentionedUser) 

    result.foreach(println) 

出力:

(timetofly,Shera_Eyra,blxcknicotine) 
(timetofly,Shera_Eyra,kimtheskimm) 
(hellocake,Shera_Eyra,blxcknicotine) 
(hellocake,Shera_Eyra,kimtheskimm) 

場合あなたは、代わりにあなたのリストを与えるために歩留まりを変更、文字列のリストの配列ではなく、文字列のタプルの配列を好むだろう:あなたのコードスニペットでyield List(hashtag, user, mentionedUser)

+0

そのコードを使用しようとしましたが、このエラーを受け取りました。 '値_1はorg.apache.spark.streaming.dstream.DStreamのメンバーではありません。[(Array [String]文字列、リスト[文字列])] ' – user8312833

+0

あなたのデータがDStreamの形式であれば、それを' map'することができます – Tom

1

dataDStream[(Array[String], String, List[String])]です。ご希望のフォーマットでDStream[String]を取得するには、flatMapmapを使用することができます。各タプルは、ハッシュタグのエンティティ、ユーザー、および言及のエンティティで構成されているDStream[(String, String, String)]

val data = stream.map { line => 
    (line.getHashtagEntities.map(_.getText), 
    line.getUser().getScreenName(), 
    line.getUserMentionEntities.map(_.getScreenName).toList) 
} 

val data2 = data.flatMap(a => a._1.flatMap(b => a._3.map(c => (b, a._2, c)))) 
       .map { case (hash, user, mention) => s"$hash, $user, $mention" } 

flatMap結果。パターン照合を伴うmapへのその後の呼び出しでは、Stringの各要素がカンマとスペースで区切られたが作成されます。

+0

私からの非常に良い答えupvote :) –

関連する問題