Spark流-识别传入的文件格式

时间:2018-12-08 18:30:52

标签: java apache-spark spark-streaming avro parquet

我正在研究一个框架,该框架可以接受输入,因为一组文件将传入的文件集规范化为通用格式,然后将其输出到hdfs中。 该框架将采用csv,parquet和avro不同格式的文件,每个文件具有不同的压缩方案。

我尝试使用以下代码获取文件并对其进行规范化。可以从流中正确读取CSV文件,但无法正确读取AVRO数据文件,从而在读取数据时会得到垃圾值。

// Receive streaming data from the source
JavaReceiverInputDStream < File > files = streamingContext.socketStream(
 HOST,
 PORT, in -> {
  File file = File.createTempFile("Normalized ", String.valueOf(Instant.now().toEpochMilli()));
  FileWriter fileWriter = new FileWriter(file, true);
  List < File > out = new ArrayList < > ();
  try (BufferedReader reader = new BufferedReader(new InputStreamReader( in , StandardCharsets.UTF_8))) {
   for (String line;
    (line = reader.readLine()) != null;) {
    //     System.out.println(line+" rrr____");
    fileWriter.append(normalize(line)); // Normalizes each String and appends to a CSV file.
   }
   fileWriter.flush();
   fileWriter.close();
  }
  out.add(file);
  return out;
 },
 StorageLevel.DISK_ONLY());

Code Output, Can read CSV Files properly but getting garbage values while reading AVRO data

正确打印CSV文件中的数据时,AVRO文件中的数据已损坏。

我写了一个类来测试我上面的代码的正常工作,以规范化文件,文件在套接字上连续发送以进行测试。

try (ServerSocket serverSocket = new ServerSocket(PORT); 
Socket clientSocket = serverSocket.accept(); 
DataOutputStream dos = new DataOutputStream(clientSocket.getOutputStream());) {
         byte[] buf = null;
         int n = 0;
         while (true) {
          buf = new byte[4092];
          FileInputStream fis = new FileInputStream(eventQueue.take()); //takes the file from queue and send it over network on a socket.
          while ((n = fis.read(buf)) != -1) {
           dos.write(buf, 0, n);
           dos.flush();
          }
         }
        } catch (IOException | InterruptedException e) {
         throw new RuntimeException("Server error", e);
        }

我的问题-

  1. 我读取来自Socket的数据流的方法正确吗?
  2. 在Spark Streaming中接收数据时如何识别传入的文件格式,并提供读取不同格式文件的不同实现方式。 (以获取有效读取每种格式文件的最佳方法)。
  3. 我应该使用Kafka从套接字获取数据并传递给Spark Streaming吗,在这种情况下,Kafka会很好用吗?

任何帮助和反馈将不胜感激。 谢谢

0 个答案:

没有答案