Once the data has been received by a DStreams, it transforms them to RDDs and they are then processed using the Spark core engine. As far as processing of data in Spark core is concerned it is exactly once as the transformation on received input RDD will always have the same set of records and hence the same output.