【问题标题】:How to apply RDD function on DStream while writing code in scala在scala中编写代码时如何在DStream上应用RDD函数
【发布时间】:2014-08-30 11:57:55
【问题描述】:

我正在尝试在 Scala 中编写一个简单的 Spark 代码。

我在这里得到一个 DStream。我成功地打印了这个 DStream。但是,当我尝试在此 DStream 上执行任何类型的“foreach”、“foreachRDD”或“transform”功能时,在我的程序执行期间,我的控制台就会冻结。在这里我没有收到任何错误,但控制台只是变得无响应,直到我手动终止 Eclipse 控制台操作。我在这里附上代码。请告诉我我做错了什么。

我的主要目标是在 DStream 上应用 RDD 操作,据我所知,我需要使用“foreach”、“foreachRDD”或“transform”函数将我的 DStream 转换为 RDD。

我已经通过使用 Java 实现了相同的目标。但是在scala中我遇到了这个问题。

还有其他人面临同样的问题吗?如果没有,请帮助我。谢谢

我在这里写一个示例代码

object KafkaStreaming {
    def main(args: Array[String]) {
        if (args.length < 4) {
            System.err.println("Usage: KafkaWordCount <zkQuorum> <group> <topics> <numThreads>")
            System.exit(1)
        }

        val Array(zkQuorum, group, topics, numThreads) = args
                val ssc =  new StreamingContext("local", "KafkaWordCount", Seconds(2))
        val topicpMap = topics.split(",").map((_,numThreads.toInt)).toMap
        val lines = KafkaUtils.createStream(ssc, zkQuorum, group, topicpMap).map(_._2)
        val splitLines:DStream[String] = lines.flatMap(_.split("\n"))

        val pairAlarm = splitLines.map(

                x=>{
                            //Some Code
                            val alarmPair = new Tuple2(key, value)
                            alarmPair
                }

                )


            //pairAlarm.print


            pairAlarm.foreachRDD(x=>{
            println("1 : "+x.first)
            x.collect                           // When the execution reaching this part its getting freeze
            println("2: "+x.first)
            })


                ssc.start()
                ssc.awaitTermination()
    }
}

【问题讨论】:

    标签: scala apache-spark spark-streaming


    【解决方案1】:

    我不知道这是否是您的问题,但我遇到了类似的问题。我的程序在几次迭代后才停止打印。没有例外等。在 5-6 次打印后停止打印。

    改变这个:

    val ssc =  new StreamingContext("local", "KafkaWordCount", Seconds(2))
    

    到这里:

    val ssc =  new StreamingContext("local[2]", "KafkaWordCount", Seconds(2))
    

    解决了这个问题。 Spark 需要至少 2 个线程才能运行,并且文档示例具有误导性,因为它们也仅使用 local

    希望这会有所帮助!

    【讨论】:

    • 谢谢Serejja。看到你的回答后,我意识到了这个错误。这真是一个非常愚蠢的问题。 :D 谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 2022-08-19
    • 2013-01-25
    • 2011-09-06
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多