我已经编写了以下代码来连接来自spark streaming的kinesis,但是没有收到任何数据。
val kinesisStream = KinesisUtils.createStream(ssc,appName,streamName,endpointUrl,regionName,InitialPositionInStream.LATEST,batchInterval,StorageLevel.MEMORY_AND_DISK_2)
kinesisStream.print() // nothing getting printed here
val data = kinesisStream.flatMap(byteArray => new String(byteArray))
data.foreachRDD { rdd =>
println("data==" + rdd.collect().length) // no data here too
rdd.collect()//.saveAsTextFile("file:///home/myHome/Code/sample/somedata.txt");
}
我试着写入S3和文件系统,它按文件夹写入文件名,在侧面我只看到零字节的_SUCCESS文件。
顺便说一下,我可以写相同的kinesis流并从java中读取数据这里有什么问题。
答案 0 :(得分:0)
我得到了这个问题的解决方案。
代码可以从kinesis中提取数据。与数据一起,它还生成了许多零字节部分文件。因为它的流应用程序数据部分文件是在给定的时间间隔内生成的,因此如果数据在该时间间隔内不可用,则它生成零字节文件。
添加一项检查以删除DF代码中的空零件文件,以便DF只能写入包含数据的零件文件。
我们在此更改后开始获取数据。