Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如果(!rdd.partitions.isEmpty)不工作,则触发流式处理_Scala_Apache Kafka_Spark Streaming_Kafka Consumer Api_Dstream - Fatal编程技术网

Scala 如果(!rdd.partitions.isEmpty)不工作,则触发流式处理

Scala 如果(!rdd.partitions.isEmpty)不工作,则触发流式处理,scala,apache-kafka,spark-streaming,kafka-consumer-api,dstream,Scala,Apache Kafka,Spark Streaming,Kafka Consumer Api,Dstream,我试图从kafka服务器创建一个数据流,然后对该数据流进行一些转换。我已经包含了一个关于流是否为空的捕获(if(!rdd.partitions.isEmpty));但是,即使没有将任何事件发布到卡夫卡主题,也永远不会到达else语句 val stream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics) stream.foreachRDD

我试图从kafka服务器创建一个数据流,然后对该数据流进行一些转换。我已经包含了一个关于流是否为空的捕获(
if(!rdd.partitions.isEmpty)
);但是,即使没有将任何事件发布到卡夫卡主题,也永远不会到达
else
语句

val stream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics)

stream.foreachRDD { rdd =>
    if(!rdd.partitions.isEmpty) {

        val message = rdd.map((x$2) => x$2._2).collect().toList.map(parser)

        val val = message(0)

    } else println("empty stream...")

    ssc.start() 
    ssc.awaitTermination()

}

在使用
KafkaUtils.createDirectStream
而不是
createStream
时,是否应该使用另一种语句来检查流是否为空?

使用
RDD.isEmpty
而不是
RDD.partitions.isEmpty
,它添加了一个检查底层分区是否实际包含元素的检查:

stream.foreachRDD { rdd =>
  if(!rdd.isEmpty) {
    // Stuff
  }
}
RDD.partitions.isEmpty
不起作用的原因是
RDD
中存在一个分区,但该分区本身是空的。但是从
分区
这是一个
数组[Partition]
的视图来看,它不是空的