我在使用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));
谢谢!
答案 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.*;