Двоичный файл читается в потоке данных Google - PullRequest
0 голосов
/ 11 октября 2018

Мне нужно прочитать двоичный файл в потоке данных Google, мне просто нужно прочитать файл и проанализировать каждые 64 байта как одну запись и применить некоторую логику в каждом байте каждого 64 байта двоичного файла в потоке данных.

то же самое, что я пробовал в спарк, код smape, как показано ниже:

 def main(args: Array[String]): Unit = {

    val spark = SparkSession
      .builder()
      .appName("RecordSplit")
      .master("local[*]")
      .getOrCreate()

    val df = spark.sparkContext.binaryRecords("< binary-file-path>", 64)

    val Table = df.map(rec => {
      val c1= (convertHexToString(rec(0)))
      val c2= convertBinaryToInt16(rec, 48)
      val c3= rec(59)
      val c4= convertHexToString(rec(50)) match {
        case str =>
          if (str.startsWith("c"))
            2020 + str.substring(1).toInt
          else if (str.startsWith("b"))
            2010 + str.substring(1).toInt
          else if (str.startsWith("b"))
            2000 + str.substring(1).toInt
        case _ => 1920
      }

1 Ответ

0 голосов
/ 10 ноября 2018

Я бы порекомендовал следующее:

  • Если вы не ограничены Python / Scala, OffsetBasedSource (FileBasedSource является подклассом) может удовлетворить ваши потребности, потому что этоиспользует смещения для определения начальной и конечной позиций.

  • TikaIO может обрабатывать метаданные, однако может считывать двоичные данные согласно документации.

  • Пример dataflow-мнения-анализ содержит информацию для чтения из произвольной позиции байта.

  • Существуют дополнительные документы для создания пользовательского Прочитайте реализацию .Возможно, вы захотите взглянуть на эти Примеры Beam , чтобы узнать, как реализовать пользовательский источник, например, Пример Python .

Aдругой подход заключался бы в создании массивов по 64 байта вне конвейера (в памяти) и затем создании PCollection из памяти , просто имейте в виду, что документация рекомендует его для модульных тестов.

...