JavaStreamingContext.fileStream的Java实现

时间:2014-12-27 07:03:21

标签: java streaming filestream apache-spark

我在使用spark streaming进行编程时遇到了一些麻烦。因为我想创建一个输入流并使用自定义输入格式读取它们。定义如下:

def fileStream[K, V, F <: NewInputFormat[K, V]](
      directory: String): JavaPairInputDStream[K, V] = {
    implicit val cmk: ClassTag[K] =
      implicitly[ClassTag[AnyRef]].asInstanceOf[ClassTag[K]]
    implicit val cmv: ClassTag[V] =
      implicitly[ClassTag[AnyRef]].asInstanceOf[ClassTag[V]]
    implicit val cmf: ClassTag[F] =
      implicitly[ClassTag[AnyRef]].asInstanceOf[ClassTag[F]]
    ssc.fileStream[K, V, F](directory)
}

如果我使用scala,那么我将编写如下代码:

val lines = ssc.fileStream[LongWritable, Text, TextInputFormat](dataDirectory)

但是,当我像这样使用java时:

ClassTag<LongWritable> k = scala.reflect.ClassTag$.MODULE$.apply(LongWritable.class);
ClassTag<Text> v = scala.reflect.ClassTag$.MODULE$.apply(Text.class);
ClassTag<InputFormat<LongWritable, Text>> f = scala.reflect.ClassTag$.MODULE$.apply(TextInputFormat.class);
JavaPairInputDStream<LongWritable, Text> inputLines = ssc.fileStream<k, v, f>("dataDirectory);

我会遇到“ fileStream无法解析或不是字段”的错误。 那么,如何使用JavaStreamingContext.fileStream?

我使用以下代码创建了ssc:

JavaStreamingContext ssc = new JavaStreamingContext(new SparkConf().setAppName("Spark Streaming Demo"), new Duration(3000));

谢谢!

2 个答案:

答案 0 :(得分:0)

fileStream无法解析或不是字段问题是由于使用fileStream不当引起的。使用fileStream时如下:

JavaPairInputDStream<LongWritable, Text> inputLines = ssc.<LongWritable, Text, TestInputFormat>fileStream("dataDirectory);

和TestInputFormat必须扩展OutputFormat

public interface TestOutputFormat extends OutputFormat<LongWritable, Text>

以这种方式使用时没有问题,但您必须使用旧API(org.apache.hadoop.mapred。*)实现TestInputFormat类。我没试过这个。 ^ _ ^

答案 1 :(得分:-1)

您需要添加

import java.io.File;

import java.io.*;