如何使用ssc.filestream()来处理Java

时间:2016-04-28 06:28:02

标签: zip spark-streaming

我是Spark Streaming的新手。

我想监视并解压缩特定目录中的所有.zip文件。 我引用了http://cutler.io/2012/07/hadoop-processing-zip-files-in-mapreduce/并编写了以下代码

JavaPairInputDStream<Text, BytesWritable> streamlogFiles=ssc.fileStream(logDir, Text.class, BytesWritable.class, ZipFileInputFormat.class);

但是,我发现fileStream()不处理exsitedin /移动到指定目录的zip文件。

我有什么想念吗?

1 个答案:

答案 0 :(得分:0)

您可以在此处使用ZipFileInputFormat:https://github.com/cotdp/com-cotdp-hadoop/tree/master/src/main/java/com/cotdp/hadoop

使用

创建一个fileStream
val files = ssc.fileStream[Text, BytesWritable, ZipFileInputFormat](someInputDirectory)

files.foreachRDD{ rdd =>
  rdd.foreachPartition { partition =>
    partition.foreach { record =>
      process(record._1.toString, record._2)
    }
  }
}

其中record._1.toStringrecord._2的文件名是该文件的BytesWriteable。如果你不希望InputFormat解压缩.zip,你需要一个不同的自定义FileInputFormat或者必须修改ZipFileInputFormat。

为了测试这一点,请确保您要添加到someInputDirectory的.zip文件上次修改了&lt; 1分钟前,否则SparkStreaming默认会忽略它。