scânteie de streaming filestream

voturi
8

Sunt de programare cu scânteie de streaming, dar au unele probleme cu timpanică. Am încercat să folosească funcția StreamingContext.fileStream

Definirea acestei funcții este ca acest lucru:

def fileStream[K, V, F <: InputFormat[K, V]](directory: String)(implicit arg0: ClassManifest[K], arg1: ClassManifest[V], arg2: ClassManifest[F]): DStream[(K, V)]

Crearea unui flux de intrare care monitorizează un sistem de fișiere Hadoop compatibil pentru fișierele noi și le citește folosind date tipuri cheie-valoare și formatul de intrare. Numele de fișiere începând cu. sunt ignorate. K tip cheie pentru citirea HDFS tip de fișier V Valoare pentru citirea fișierului HDFS formatul F de intrare pentru citirea director de fișiere HDFS director HDFS pentru a monitoriza pentru nou fișier

Nu știu cum să treacă tipul de cheie și valoare. Codul meu în flux scânteie:

val ssc = new StreamingContext(args(0), StreamingReceiver, Seconds(1),
  System.getenv(SPARK_HOME), Seq(/home/mesos/StreamingReceiver.jar))

// Create a NetworkInputDStream on target ip:port and count the
val lines = ssc.fileStream(/home/sequenceFile)

cod Java pentru a scrie fișierul Hadoop:

public class MyDriver {

private static final String[] DATA = { One, two, buckle my shoe,
        Three, four, shut the door, Five, six, pick up sticks,
        Seven, eight, lay them straight, Nine, ten, a big fat hen };

public static void main(String[] args) throws IOException {
    String uri = args[0];
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(URI.create(uri), conf);
    Path path = new Path(uri);
    IntWritable key = new IntWritable();
    Text value = new Text();
    SequenceFile.Writer writer = null;
    try {
        writer = SequenceFile.createWriter(fs, conf, path, key.getClass(),
                value.getClass());
        for (int i = 0; i < 100; i++) {
            key.set(100 - i);
            value.set(DATA[i % DATA.length]);
            System.out.printf([%s]\t%s\t%s\n, writer.getLength(), key,
                    value);
            writer.append(key, value);
        }
    } finally {
        IOUtils.closeStream(writer);
    }
}

}

Întrebat 15/05/2013 la 08:00
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
5

Dacă doriți să utilizați fileStream, vă va trebui să furnizeze toate cele 3 params de tip să - l atunci când a sunat. Trebuie să știi ce dumneavoastră Key, Valueși InputFormattipuri sunt înainte de a apela la aceasta. În cazul în care tipurile tale au fost LongWritable, Textsi TextInputFormat, v - ar suna fileStreamastfel:

val lines = ssc.fileStream[LongWritable, Text, TextInputFormat]("/home/sequenceFile")

Dacă aceste 3 tipuri se întâmplă să fie tipuri de dvs., atunci este posibil să doriți să utilizați în textFileStreamschimb , deoarece nu are nevoie de nici un tip params și delegați la fileStreamutilizarea acestor 3 tipuri am menționat. Folosind ca ar arata astfel:

val lines = ssc.textFileStream("/home/sequenceFile")
Publicat 15/05/2013 la 11:23
sursa de către utilizator

voturi
2
val filterF = new Function[Path, Boolean] {
    def apply(x: Path): Boolean = {
      val flag = if(x.toString.split("/").last.split("_").last.toLong < System.currentTimeMillis) true else false
      return flag
    }
}

val streamed_rdd = ssc.fileStream[LongWritable, Text, TextInputFormat]("/user/hdpprod/temp/spark_streaming_input",filterF,false).map(_._2.toString).map(u => u.split('\t'))
Publicat 31/10/2016 la 17:00
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more